ORACLE ORA-00020與parallel並行
6月份巡檢中,石家莊Oracle資料庫告警日誌發現ORA-00020:
maximum number of processes (300) exceeded,提取告警時間段的AWR,觀察發現:PX Deq: Slave Session Stats等待事件
觀察sql統計資訊發現insert-select並行的SQL語句,如下所示:
經過與開發核實,發現在一個儲存過程包中,有10條insert-select並行sql語句,並且在儲存過程的最後一個insert完成做提交。這導致並行SQL語句申請過多的程式,進而導致資料庫程式數超過最大數。以下是配合開發在測試資料庫做的insert-select並行測試。
當去掉/*+parallel*/時,透過觀察oracle等待事件,沒有發現任何並行的等待事件。
當設定/*+parallel 4*/時,透過觀察oracle等待事件、程式,以及透過sql_id查詢出的sql文字發現,在大部分情況下,oracle會小於4+1個程式數的方式執行sql,但是在很短的時間內,oracle啟動的程式數仍有可能會大於限制的程式數。如下圖,在開4個parallel的情況下,sql執行過程中也出現了啟動了8個並行程式的時候。
後臺捕獲到的insert-select的sql語句:
insert-select(parallel 4 )時等待事件:
insert-select(parallel 4 )時,並行程式峰值有8個程式同時進行:
另外,經過實驗驗證:當insert-select(parallel)不加並行限制時,default情況下,並行數為cpu(個數)*parallel_threads_per_cpu(每個cpu允許的並行程式數),監控sql執行過程可以發現,在大部分情況下,oracle會小於16+1個程式數的方式執行sql,在很短的時間內,oracle啟動的程式數可能會大於限制的程式數。
因此,在insert-select並行使用過程中,要結合資料庫伺服器CPU實際情況,對parallel做限制,防止程式數使用達到最大值而導致資料庫服務不可用。另外oracle提供一個引數parallel_max_servers=n,即當前例項總共啟動的並行服務程式不能超過這個引數的設定值。
觀察sql統計資訊發現insert-select並行的SQL語句,如下所示:
經過與開發核實,發現在一個儲存過程包中,有10條insert-select並行sql語句,並且在儲存過程的最後一個insert完成做提交。這導致並行SQL語句申請過多的程式,進而導致資料庫程式數超過最大數。以下是配合開發在測試資料庫做的insert-select並行測試。
當去掉/*+parallel*/時,透過觀察oracle等待事件,沒有發現任何並行的等待事件。
當設定/*+parallel 4*/時,透過觀察oracle等待事件、程式,以及透過sql_id查詢出的sql文字發現,在大部分情況下,oracle會小於4+1個程式數的方式執行sql,但是在很短的時間內,oracle啟動的程式數仍有可能會大於限制的程式數。如下圖,在開4個parallel的情況下,sql執行過程中也出現了啟動了8個並行程式的時候。
後臺捕獲到的insert-select的sql語句:
insert-select(parallel 4 )時等待事件:
insert-select(parallel 4 )時,並行程式峰值有8個程式同時進行:
另外,經過實驗驗證:當insert-select(parallel)不加並行限制時,default情況下,並行數為cpu(個數)*parallel_threads_per_cpu(每個cpu允許的並行程式數),監控sql執行過程可以發現,在大部分情況下,oracle會小於16+1個程式數的方式執行sql,在很短的時間內,oracle啟動的程式數可能會大於限制的程式數。
因此,在insert-select並行使用過程中,要結合資料庫伺服器CPU實際情況,對parallel做限制,防止程式數使用達到最大值而導致資料庫服務不可用。另外oracle提供一個引數parallel_max_servers=n,即當前例項總共啟動的並行服務程式不能超過這個引數的設定值。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2114692/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle並行操作——並行查詢(Parallel Query)Oracle並行Parallel
- oracle的Parallel 並行技術OracleParallel並行
- oracle parallel並行_引數parameter_parallel_max_serverOracleParallel並行Server
- 並行(Parallel)並行Parallel
- oracle parallel並行及px檢視viewOracleParallel並行View
- Oracle資料庫並行機制Parallel ExecutionOracle資料庫並行Parallel
- 【oracle】使用DBMS_PARALLEL_EXECUTE並行更新表OracleParallel並行
- Parallel 並行技術Parallel並行
- oracle10g parallel execution並行執行與大池large pool使用之四OracleParallel並行
- ORACLE 並行(PARALLEL)實現方式及優先順序Oracle並行Parallel
- 並行閘道器 Parallel Gateway並行ParallelGateway
- 並行處理 Parallel Processing並行Parallel
- MYSQL並行複製(parallel replication部署篇)MySql並行Parallel
- fast_start_parallel_rollback和並行rollbackASTParallel並行
- EXPDP/IMPDP 中的並行度PARALLEL引數並行Parallel
- dbms_mview 並行重新整理 refresh parallelView並行Parallel
- Oracle11.2新特性之使用DBMS_PARALLEL_EXECUTE包實現並行OracleParallel並行
- oracle hint_no_parallel_no_parallel_indexOracleParallelIndex
- oracle hint_parallel_parallel_indexOracleParallelIndex
- alter session enable parallel dml 使DML語句並行執行SessionParallel並行
- 使用dbms_parallel_execute來完成DML的並行Parallel並行
- Parallel Query Tuning(並行化查詢優化)Parallel並行優化
- 使用11g dbms_parallel_execute執行並行更新(下)Parallel並行
- 使用11g dbms_parallel_execute執行並行更新(上)Parallel並行
- Oracle Parallel ParametersOracleParallel
- Oracle's ParallelOracleParallel
- Oracle Parallel ExecutionOracleParallel
- Oracle Parallel DMLOracleParallel
- parallel: 一個簡單的並行執行Go迴圈的庫Parallel並行Go
- Oracle並行操作——並行DML操作Oracle並行
- parallel並行度的相關操作、概念、引數解釋Parallel並行
- 11G R2中的並行執行,dbms_parallel_execute並行Parallel
- 【原創】Oracle 並行原理與示例總結Oracle並行
- oracle Parallel技術OracleParallel
- Oracle並行操作——從序列到並行Oracle並行
- Oracle並行FAQOracle並行
- Oracle的並行Oracle並行
- 8.0新特性-並行查詢innodb_parallel_read_threads並行Parallelthread