您好,登錄后才能下訂單哦!
這篇文章主要介紹“Orcle怎么增強并行語句隊列”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Orcle怎么增強并行語句隊列”文章能幫助大家解決問題。
Enhancing parallel statement queuing provides more flexibility to address business requirements for mission-critical environments.
增強并行語句隊列提供了更多的靈活性,以滿足任務關鍵環境的業務需求。
When the parameter PARALLEL_DEGREE_POLICY is set to AUTO, Oracle Database queues SQL statements that require parallel execution if the necessary number of parallel execution server processes are not available. After the necessary resources become available, the SQL statement is dequeued and allowed to execute. The default dequeue order is a simple first in, first out queue based on the time a statement was issued.
1.解析SQL并自動決定DOP(degree of parallelism)
2.檢查是否有足夠的并行資源(PARALLEL_SERVERS_TARGET當前環境默認值16)–不能超過PARALLEL_MAX_SERVERS大小
a.如果有(可用并行資源大于當前SQL所需的),并且前面沒有正在執行的SQL,那么就會執行該SQL
b.如果沒有(可用并行資源小于當前SQL所需的),則會排隊等待有足夠的資源來執行該SQL。
如果發生語句排隊等待現象,那么會以等待事件:resmgr:pq queued表現出來。
在PARALLEL_DEGREE_POLICY 為AUTO情況下,使用NO_STATEMENT_QUEUING 和STATEMENT_QUEUING來影響語句是否使用Parallel Statement Queuing隊列。
使用NO_STATEMENT_QUEUING會使語句繞過parallel statement queue。但是這可能會超過PARALLEL_SERVERS_TARGET指定的最大并行執行數。
如:
SELECT /*+ NO_STATEMENT_QUEUING */ last_name, department_name FROM employees e, departments d WHERE e.department_id = d.department_id;
STATEMENT_QUEUING HINT讓SQL語句使用parallel statement queue,但是只有在可以在并行進程足夠的時才運行。在啟用隊列之前,可用的并行執行服務器的數量等于在使用的并行執行服務器數量和系統中允許的最大數量之間的差,是有PARALLEL_SERVERS_TARGET參數定義的。
如:
SELECT /*+ STATEMENT_QUEUING */ last_name, department_name FROM employees e, departments d WHERE e.department_id = d.department_id;
PARALLEL_SERVERS_TARGET參數默認值不是固定不變的,而是有公式計算而來的。
公式:PARALLEL_THREADS_PER_CPU * CPU_COUNT * concurrent_parallel_users * 2
如:當前我的環境
PARALLEL_THREADS_PER_CPU = 2 SQL> show parameter PARALLEL_THREADS_PER_CPU NAME TYPE VALUE ------------------------------------ ---------------------- parallel_threads_per_cpu integer 2 CPU_COUNT = 1 SQL> show parameter CPU_COUNT NAME TYPE VALUE ------------------------------------ ---------------------- cpu_count integer 1
concurrent_parallel_users參數值分為三種情況:
1.如果設置了MEMORY_TARGET或SGA_TARGET,那么concurrent_parallel_users=4
2.如果沒有設置MEMORY_TARGET或SGA_TARGET,并且也設置了PGA_AGGREGATE_TARGE的大小,那么concurrent_parallel_users=2
3.如果沒有設置PGA_AGGREGATE_TARGE的大小,那么concurrent_parallel_users=1
當前環境:屬于第一種情況,設置了MEMORY_TARGET,因為沒有設置PGA_AGGREGATE_TARGET。所以不滿足第二章情況
SQL> show parameter MEMORY_TARGET NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ memory_target big integer 1G SQL> show parameter SGA_TARGET NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ sga_target big integer 0 SQL> show parameter PGA_AGGREGATE_TARGET NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ pga_aggregate_target big integer 0 SQL> show parameter PARALLEL_SERVERS_TARGET NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ parallel_servers_target integer 16
所以,PARALLEL_SERVERS_TARGET= 2 * 1 *4 * 2 = 16,和查詢出來的結果一致。
只能在CDB中的system級別修改,大小0到PARALLEL_MAX_SERVERS之間,重啟生效
SQL> alter system set parallel_servers_target = 17 scope = spfile; System altered. SQL> startup force ORACLE instance started. Total System Global Area 1073741824 bytes Fixed Size 8801008 bytes Variable Size 1023411472 bytes Database Buffers 37748736 bytes Redo Buffers 3780608 bytes Database mounted. Database opened. SQL> show parameter PARALLEL_SERVERS_TARGET NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ parallel_servers_target integer 17
關于“Orcle怎么增強并行語句隊列”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。