分享:RAC 環境中最常見的 5 個資料庫和/或例項效能問題 (文件 ID 1602076.1)
文件內容
適用於:Oracle Database - Enterprise Edition - 版本 10.1.0.2 到 11.2.0.3 [發行版 10.1 到 11.2]本文件所含資訊適用於所有平臺 用途
本文旨在提供關於 RAC 環境中最常見的資料庫和/或例項效能問題的摘要以及可能的解決方案 適用範圍DBAs 詳細資訊問題 1:大量塊丟失 (gc lost blocks, gc current/cr lost blocks)症狀
I. AWR 報告中顯示有大量塊丟失。
II. netstat -s 報告資料包重新組裝故障(reassambly failure)和丟失資料包(dropped packets)增加。
問題 2:大量 log file sync 等待症狀
I. AWR 報告中顯示 log file sync 始終位於 Top 5 等待事件列表中。
II. 平均 log file sync 時間很長(> 20 毫秒)。 III. 平均 log file parallel write 時間很長(> 10 毫秒)。 III. 平均 redo write broadcast ack time 或者 wait for scn ack 時間很長(> 10 毫秒)。 IV. 平均 log file sync 時間很短,但 log file sync 等待次數太多。
I. 重做日誌檔案所在裝置的 IO 服務時間和吞吐量不理想。
II. Oracle Bug。有關已知 Oracle Bug,請檢視 WAITEVENT: "log file sync" Reference (Document 34592.1)。 III. LMS 未在 RT(實時)類中執行。 IV. LGWR 程式排程延遲。 V. 提交數太多。 VI. 作業系統資源緊張。
I. 如果日誌檔案並行寫入始終很高(> 10 毫秒),則將重做日誌檔案移動到具有較高吞吐量和更短響應時間的磁碟上。日誌檔案並行寫入理想範圍應在 1-2 毫秒之間。
II. 應用適用於您的環境的已知 Oracle Bug 修復。獲取這些修復的最有效方法是應用最新 PSU 補丁程式。Document 756671.1 提供了有關最新 PSU 的詳細資訊。 III. 確保 LMS 程式在 RT 類中執行。LMS 程式預設情況下在 RT 類中執行。 IV. 使用批次提交而不是在每次 DML 操作之後提交,可以減少提交數量。 V. 檢視是否有任何活動可以使用 NOLOGGING/UNRECOVERABLE 選項安全地完成。 VI. 檢視是否可以使用 COMMIT NOWAIT 選項。有關詳細資訊,請參閱 Document 857576.1。
@For Support Only: Renice LGWR to run at higher priority or run LGWR in RT class by adding LGWR to the parameter: _high_priority_processes='VKTM|LMS|LGWR". Consider doing this only if log file sync is high and scheduling delay of LGWR is found to be causing it. Be prepared to test it thoroughly.
問題 3:Mutexes 上的長時間等待
Mutexes 是比閂鎖(latches)更為輕型且粒度更細的並行機制。獲取 Mutex 的目的是為了確保正確管理特定操作的並行執行,例如,如果一個會話正在更改記憶體中的資料結構,則其他會話等到獲取Mutex 後,才能進行類似的更改。下面是最常見的與 Mutex 相關的等待:
AWR 報告中顯示“cursor: pin S wait on X as one of the top wait”。
請檢視 Troubleshooting 'cursor: pin S wait on X' waits (Document 1349387.1).
請檢視 Troubleshooting 'cursor: pin S wait on X' waits (Document 1349387.1).
AWR 報告中顯示“cursor: pin S as one of the top waits”
I. 某個特定 Mutex 有大量並行操作,特別是在多個 CPU 的系統上。
II. 在高負載情況下,會等待非常多不同的“idn”值。 III. Oracle Bugs - ORA-600[kgxEndExamine-Bad-State] / mutex waits after a self deadlock - Wrong wait events in 11.2 ("cursor: mutex S" instead of "cursor: mutex X") - Improve concurrent mutex request handling - Prevent preemption while holding a mutex (fix only works on Solaris) - Missing entries in V$MUTEX_SLEEP.location
I. 應用 的修復。
II. 對於任何已標識的“熱點”SQL,使用者可以透過將 SQL 替換為一些由其他會話執行的變體,來減少特定遊標上的並行操作。有關詳細資訊,請檢視 WAITEVENT: cursor: pin S Reference (Document 1310764.1)。 III. 應用其他已知 Oracle bug 的修復。獲取修復的最有效方法是應用最新 PSU patch(補丁程式)。 Document 756671.1 提供了有關推薦補丁程式的詳細資訊。
AWR 報告中顯示“library cache: Mutex X as one of the TOP waits”。
I. 頻繁硬解析。
II. 高版本數。 III. 失效和重新載入。 IV. Oracle Bug。有關詳細資訊,請檢視 WAITEVENT: "library cache: mutex X" (Document 727400.1) 以獲取已知 Oracle Bug 列表。
I. 減少硬解析、失效和重新載入。有關詳細資訊,請檢視 Troubleshooting: Tuning the Shared Pool and Tuning Library Cache Latch Contention (Document 62143.1)。
II. 檢視 Troubleshooting: High Version Count Issues (Document 296377.1) 以解決高版本數問題。 III. 應用已知 Oracle bug 的修復。獲取修復的最有效方法是應用最新 PSU patch(補丁程式)。Document 756671.1 提供了有關推薦 patch(補丁程式)的詳細資訊。 問題 4:高 enq: TX -row lock contention, enq: TX - index contention, enq: TX - ITL allocate entry 等待
A. enq: TX - Index Contention
I. AWR 報告中顯示,在模式 4 下,“enq: TX - index contention and enq: TX - row lock contention”上有大量等待。
II. AWR 報告中顯示有大量的branch node splits, leaf node splits 和leaf node 90-10 splits III. AWR 報告(Segments by Row Lock Waits)中顯示特定段上有大量行鎖等待。 IV. AWR 報告中顯示其他等待,例如索引分支或葉塊上的 gc buffer busy 等待、遠端回滾段段頭上的 gc current block busy 和 gc current split。 示例: Top 5 Timed Foreground Events Event Waits Time(s) Avg wait (ms) % DB time Wait Class enq: TX - index contention 29,870 1,238 41 9.52 Concurrency Instance Activity Stats: Statistic Total per Second per Trans branch node splits 945 0.26 0.00 leaf node 90-10 splits 1,670 0.46 0.00 leaf node splits 35,603 9.85 0.05 Segments by Row Lock Waits: Owner Tablespace Object Name Obj.Type Row Lock Waits % of Capture ACSSPROD ACSS_IDX03 ACSS_ORDER_HEADER_PK INDEX 3,425 43.62 ACSSPROD ACSS_IDX03 ACSS_ORDER_HEADER_ST INDEX 883 11.25 ACSSPROD ACSS_IDX03 ACSS_ORDER_HEADER_DT INDEX 682 8.69
I. 大量並行插入導致過量索引塊拆分。
II. 對於索引值由序列產生的索引,它不斷向右增長。
解決方案是採用避免爭用或熱點的方式重新組織索引。選項包括
I. 將索引重新建立為反向索引 II. Hash(雜湊)分割槽索引 III. 如果索引關鍵字是從序列(sequence)生成的,則增加序列的快取記憶體大小,在應用程式支援時,使用“無序”序列。
AWR 報告中顯示,在模式 4 下,“enq: TX - allocate ITL”和“enq: TX - row lock contention”上有大量等待。
相對於並行事務數量,initrans 數設定得太低
從 AWR 報告中查詢具有高 ITL 等待的段,或者使用以下 SQL:
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM V$SEGMENT_STATISTICS WHERE STATISTIC_NAME = 'ITL waits' AND VALUE > 0 ORDER BY VALUE; 增加出現高 ITL 等待的段的 initrans值。
AWR 報告中顯示,在獨佔模式 (6) 下,“enq: TX - row lock contention”上有大量等待。
這是應用程式問題,需要由應用程式開發人員參與查詢涉及的 SQL 語句。下面的文件對進一步研究該問題可能會有所幫助:
Document 102925.1 - Tracing sessions: waiting on an enqueue Document 179582.1 - How to Find TX Enqueue Contention in RAC or OPS Document 1020008.6 - SCRIPT: FULLY DECODED LOCKING Document 62354.1 - TX Transaction locks - Example wait scenarios Document 224305.1 -Autonomous Transaction can cause locking 問題 5:高 CPU 和記憶體開銷
A. 高 CPU 佔用率
I. TOP、prstat、vmstat 等作業系統工具顯示使用者 CPU 佔用率非常高,而佔用 cpu 最高的程式是 Oracle 程式或後臺程式。
II. AWR 報告中顯示最高等待數為以下一項或多項: latch free cursor pin S wait on X 或 cursor pin S wait 或 library cache mutex X latch: cache buffers chains resmgr: cpu quantum enq: RO - fast object reuse DFS lock handle III. AWR 報告(SQLs ordered by buffer gets )中顯示一些 SQL 語句每次執行都讀取很多buffer並消耗很多 cpu 時間。 IV. 高 cpu 開銷程式的堆疊資訊顯示該程式在不斷自旋(spinning)。
I. Oracle bugs:
- Mutex waits may cause higher CPU usage in 11.2.0.2.2 PSU / GI PSU - NUMA enabled by default can cause high CPU - Excessive CPU usage / OERI:kkfdPaPrm from Parallel Query / High Version count on PX_MISMATCH - Slow Truncate / DBWR uses high CPU / CKPT blocks on RO enqueue - High "resmgr:cpu quantum" but CPU has idle time - Higher CPU / Higher "cache buffer chains" latch gets / Higher "consistent gets" after truncate/Rebuild II. Linux x86-64 平臺上配置了非常大的 SGA,但是沒有實施 Hugepages。 III. 高開銷的 SQL 語句,使用了未最佳化的執行計劃。 IV. 無法找到的程式。
I. 對所遇到的 Bug 應用修復。獲取所有這些修復的最有效方法是應用最新 PSU patch(補丁程式)。Document 756671.1 提供了有關最新 PSU 的詳細資訊。
II. 實施 hugepages。有關更多說明,請參閱 Document 361670.1 - Slow Performance with High CPU Usage on 64-bit Linux with Large SGA。 III. 最佳化導致過多 buffer gets和消耗高 cpu 時間的 SQL。有關詳細資訊,請參閱 Document 404991.1 - How to Tune Queries with High CPU Usage。
I. ps、pmap 等作業系統工具顯示記憶體中的程式在不斷增長。pmap 顯示程式的 heap(堆)和/或 stack(堆疊)記憶體不斷增加。例如,
#pmap -x 26677 Address Kbytes RSS Anon Locked Mode Mapped File 00010000 496 480 - - r-x-- bash 0009A000 80 80 24 - rwx-- bash 000AE000 160 160 40 - rwx-- [ heap ] FF100000 688 688 - - r-x-- libc.so.1 II. Oracle 程式的 session uga memory 和/或 session pga memory 在不斷增長。 select se.sid,n.name,max(se.value) maxmem from v$sesstat se, v$statname n where n.statistic# = se.statistic# and n.name in ('session pga memory','session pga memory max', 'session uga memory','session uga memory max') group by n.name,se.sid order by 3; III. 會話/程式 的遊標數不斷增長。
I. Oracle bugs:
- High resource / memory use optimizing SQL with UNION/set functions with many branches HIGH MEMORY GROUP IN GES_CACHE_RESS AND ORA-4031 ERRORS BIG PGA MEM ALLOC DURING PARSE TIME - KXS-HEAP-C - ORA-04031 SHARED POOL "KKJ JOBQ WOR" - OCI memory leak using non-blocking connection for fetches - Memory leak / high CPU selecting from V$SQL_PLAN - Long parse time / high memory use from query rewrite - High version count for INSERT .. RETURNING statements with reason INST_DRTLD_MISMATCH - PLSQL cursor leak / ORA-600[kglLockOwnersListDelete] - Memory leak if connection to database is frequently opened and closed - Memory leak using BULK COLLECT within cursor opened using native dynamic sql II. 應用程式未顯式關閉遊標導致遊標洩漏。 III. 具有異常大的 hash(雜湊)聯接和/或排序操作的SQL語句。
I. 應用適用 Bug 的修復。獲取這些修復的最有效方法是應用最新 PSU patch(補丁程式)。Document 756671.1 提供了有關最新 PSU 的詳細資訊。
II. 確保應用程式顯式關閉了遊標。 III. 避免非常大的 hash(雜湊)聯接和/或排序操作。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17086096/viewspace-2123057/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RAC 環境中最常見的 5 個資料庫和/或例項效能問題 (文件 ID 1602076.1)2016-12-13資料庫
- 【MOS】RAC 環境中最常見的 5 個資料庫和/或例項效能問題 (文件 ID 1602076.1)2016-12-16資料庫
- RAC環境中的資料庫部署技術——RAC部署和效能2007-02-09資料庫
- 從單例項資料庫轉換到RAC環境——RAC的建立和配置2009-09-20單例資料庫
- RAC環境只啟動單例項資料庫2011-12-01單例資料庫
- 【RAC】在RAC環境中SQL*Plus命令對資料庫及例項的影響2010-12-05SQL資料庫
- 最常見的5個CRS/Grid Infrastructure 安裝問題 (文件 ID 1549192.1)2016-12-13ASTStruct
- RAC 環境中 gc block lost 和私網通訊效能問題的診斷 (文件 ID 1674865.1)2016-12-13GCBloC
- 【MOS】RAC 環境中 gc block lost 和私網通訊效能問題的診斷 (文件 ID 1674865.1)2017-06-24GCBloC
- 資料庫安全問題?這裡有10個最常見的2019-03-04資料庫
- rman 可否克隆rac資料庫到另外一個rac環境的資料庫中?2007-12-31資料庫
- 最常見的 11gR2 RAC 安裝問題 (文件 ID 1549168.1)2016-12-13
- 10大最常見的資料庫安全問題2014-10-21資料庫
- 單例項環境利用備份恢復RAC資料庫(四)2010-02-14單例資料庫
- 單例項環境利用備份恢復RAC資料庫(三)2010-02-13單例資料庫
- 單例項環境利用備份恢復RAC資料庫(二)2010-02-12單例資料庫
- 單例項環境利用備份恢復RAC資料庫(一)2010-02-11單例資料庫
- 連線RAC資料庫中單個例項(一)2016-04-19資料庫
- 連線RAC資料庫中單個例項(二)2010-11-03資料庫
- 利用STANDBY將單例項資料庫升級為RAC環境(四)2009-12-13單例資料庫
- 利用STANDBY將單例項資料庫升級為RAC環境(三)2009-12-12單例資料庫
- 利用STANDBY將單例項資料庫升級為RAC環境(二)2009-12-11單例資料庫
- 利用STANDBY將單例項資料庫升級為RAC環境(一)2009-12-10單例資料庫
- RAC環境下刪庫後重新建立相同例項名的問題總結2014-08-26
- Android 端 10 個最常見問題2015-11-15Android
- 查詢RAC環境中例項間資源分配情況2008-04-14
- 故障排除提示:5 個最常見的 Linux 問題2022-11-27Linux
- RAC環境中的應用程式部署——RAC部署和效能2007-02-08
- RAC環境單例項啟動資料庫收到ORA-29702報錯2016-01-11單例資料庫
- RAC環境下單例項啟動Oracle資料庫重建控制檔案案例2013-04-02單例Oracle資料庫
- RAC資料庫啟用、禁用一個例項2014-05-07資料庫
- 10個最常見的JavaScript問題2022-12-02JavaScript
- RAC環境一個例項何時會歸檔另一個例項的日誌2008-03-05
- 用srvctl 命令停止RAC 資料庫某個例項2009-05-14資料庫
- 十個最常見的Java字串問題2015-04-01Java字串
- 介紹RAC環境中的應用程式部署——RAC部署和效能2007-02-04
- Oracle10g RAC環境下DataGuard備庫搭建例項2011-04-28Oracle
- 【RAC】由系統環境變數中"/"引起的空閒例項2016-10-28變數