溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Orcle怎么增強(qiáng)并行語句隊列

發(fā)布時間:2022-10-21 14:48:34 來源:億速云 閱讀:137 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要介紹“Orcle怎么增強(qiáng)并行語句隊列”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強(qiáng),希望這篇“Orcle怎么增強(qiáng)并行語句隊列”文章能幫助大家解決問題。

1 說明

Enhancing parallel statement queuing provides more flexibility to address business requirements for mission-critical environments.

增強(qiáng)并行語句隊列提供了更多的靈活性,以滿足任務(wù)關(guān)鍵環(huán)境的業(yè)務(wù)需求。

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當(dāng)前環(huán)境默認(rèn)值16)–不能超過PARALLEL_MAX_SERVERS大小

  • a.如果有(可用并行資源大于當(dāng)前SQL所需的),并且前面沒有正在執(zhí)行的SQL,那么就會執(zhí)行該SQL

  • b.如果沒有(可用并行資源小于當(dāng)前SQL所需的),則會排隊等待有足夠的資源來執(zhí)行該SQL。

如果發(fā)生語句排隊等待現(xiàn)象,那么會以等待事件:resmgr:pq queued表現(xiàn)出來。

2 使用hint管理Parallel Statement Queuing

在PARALLEL_DEGREE_POLICY 為AUTO情況下,使用NO_STATEMENT_QUEUING 和STATEMENT_QUEUING來影響語句是否使用Parallel Statement Queuing隊列。

2.1 NO_STATEMENT_QUEUING

使用NO_STATEMENT_QUEUING會使語句繞過parallel statement queue。但是這可能會超過PARALLEL_SERVERS_TARGET指定的最大并行執(zhí)行數(shù)。

如:

SELECT /*+ NO_STATEMENT_QUEUING */ last_name, department_name
  FROM employees e, departments d
  WHERE e.department_id = d.department_id;

2.2 STATEMENT_QUEUING

STATEMENT_QUEUING HINT讓SQL語句使用parallel statement queue,但是只有在可以在并行進(jìn)程足夠的時才運(yùn)行。在啟用隊列之前,可用的并行執(zhí)行服務(wù)器的數(shù)量等于在使用的并行執(zhí)行服務(wù)器數(shù)量和系統(tǒng)中允許的最大數(shù)量之間的差,是有PARALLEL_SERVERS_TARGET參數(shù)定義的。

如:

SELECT /*+ STATEMENT_QUEUING */ last_name, department_name
  FROM employees e, departments d
  WHERE e.department_id = d.department_id;

3 PARALLEL_SERVERS_TARGET設(shè)置

PARALLEL_SERVERS_TARGET參數(shù)默認(rèn)值不是固定不變的,而是有公式計算而來的。

公式:PARALLEL_THREADS_PER_CPU * CPU_COUNT * concurrent_parallel_users * 2

如:當(dāng)前我的環(huán)境

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參數(shù)值分為三種情況:

  • 1.如果設(shè)置了MEMORY_TARGET或SGA_TARGET,那么concurrent_parallel_users=4

  • 2.如果沒有設(shè)置MEMORY_TARGET或SGA_TARGET,并且也設(shè)置了PGA_AGGREGATE_TARGE的大小,那么concurrent_parallel_users=2

  • 3.如果沒有設(shè)置PGA_AGGREGATE_TARGE的大小,那么concurrent_parallel_users=1

當(dāng)前環(huán)境:屬于第一種情況,設(shè)置了MEMORY_TARGET,因為沒有設(shè)置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,和查詢出來的結(jié)果一致。

3.1 修改參數(shù)值

只能在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

關(guān)于“Orcle怎么增強(qiáng)并行語句隊列”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI