wait event監測效能瓶頸
會話等待事件檢視:v$system_event、v$session_event、v$session_wait。
會話等待事件是獨立於應用的,所以它可以作為很好的效能監測工具的基礎依據。任何一個應用具有很高的全表掃描的等待事件都意味著i/o有了問題。
v$system_event
用來檢視整個系統級效能情況,對每個事件總計了從系統啟動以來在所有會話中發生過的情況,這些資訊每次重啟後都會被重新計數。
event:列出了所有發生的事件的名稱。latch waits、db file scattered read、db file sequential read、enqueue wait 、buffer busy wait、log file parallel write、free buffer waits。
total_waits:從資料庫啟動到現在等待事件總的等待次數。
total_timeouts:總的等待超時的次數。
time_waited:總的等待時間,以1%秒為單位。資料庫啟動以來某個等待事件在所有會話中(包括已經結束和正保持 連線的會話)總的等待時間之和。
average_wait:平均等待時間,以1%秒為單位。資料庫啟動以來某個等待事件在所有會話中平均等待時間。
v$session_event
檢視會話級的統計。會話重新建立時資訊將被重置為0。
v$session_wait
包含了當前正處於連線狀態的會話的等待事件,提供了當前已經發生或正在發生的事件的可用資訊。例如:一個正在發生鎖存器競爭的會話,此時正在等待那個鎖存器。或者,一個會話正在等待對一個資料塊的訪問。
sid:會話的id。
seq#:會話的內部順序號。
event:描述事件的名稱。
p[1-3]:提供詳細資訊。
state:提供了wait_time和seconds_in_wait兩個欄位的解釋。
*記住記錄在v$session_event中的等待事件記錄在當前等待的資源沒有等到之前是不會更新的。所以如果一個等待事件等待的事件非常長,那麼將很明顯的看到,在v$session_wait中的統計資訊將持續增加而相應v$session_event中的資訊保持不變。
發現系統變慢時,首先透過v$system_event從系統級進行收集,不僅僅要看累計的系統等待事件資訊,更重要的時一段時間內等待的時間增量。然後透過產看v$session_wait檢視,可以判斷具體問題。例如,如果發生i/o競爭,原因是由於對索引的訪問還是大量的全表掃描等等。如果命中率低,不要著急看看有沒有相關的等待事件,如果沒有就不用擔心。相反,如果命中率很高,卻存在大量的等待,原因有可能資料快取記憶體區過大,超過了實體記憶體的大小,帶來了大量的分頁交換。
帶有函式或者表示式的where語句,欄位上的索引是不會被用到的,會引起全表掃描。
總結:
瞭解應用的需求,確定為什麼要使用to_char函式遮蔽status欄位索引的使用。
調整收集到的sql語句書寫,減少全表掃描的發生,從而減少相應的i/o操作
考慮在索引上使用nologging,減少表中資料維護相應的索引維護產生的重做日誌。
減少重做日誌檔案所在磁碟上無關緊要的i/o操作,如果必要,將重做日誌檔案移動到新的磁碟上。
從長遠考慮,增加重做日誌檔案組的個數和組員檔案的大小以防止其他重做日誌相關的等待事件的發生。
會話等待事件是獨立於應用的,所以它可以作為很好的效能監測工具的基礎依據。任何一個應用具有很高的全表掃描的等待事件都意味著i/o有了問題。
v$system_event
用來檢視整個系統級效能情況,對每個事件總計了從系統啟動以來在所有會話中發生過的情況,這些資訊每次重啟後都會被重新計數。
event:列出了所有發生的事件的名稱。latch waits、db file scattered read、db file sequential read、enqueue wait 、buffer busy wait、log file parallel write、free buffer waits。
total_waits:從資料庫啟動到現在等待事件總的等待次數。
total_timeouts:總的等待超時的次數。
time_waited:總的等待時間,以1%秒為單位。資料庫啟動以來某個等待事件在所有會話中(包括已經結束和正保持 連線的會話)總的等待時間之和。
average_wait:平均等待時間,以1%秒為單位。資料庫啟動以來某個等待事件在所有會話中平均等待時間。
v$session_event
檢視會話級的統計。會話重新建立時資訊將被重置為0。
v$session_wait
包含了當前正處於連線狀態的會話的等待事件,提供了當前已經發生或正在發生的事件的可用資訊。例如:一個正在發生鎖存器競爭的會話,此時正在等待那個鎖存器。或者,一個會話正在等待對一個資料塊的訪問。
sid:會話的id。
seq#:會話的內部順序號。
event:描述事件的名稱。
p[1-3]:提供詳細資訊。
state:提供了wait_time和seconds_in_wait兩個欄位的解釋。
- waiting:會話正在等待這個事件。
- waited unknown time :由於timed_statistics設定為false,而導致不能得到關於時間的資訊。
- waited short time:表示會話發生了等待,但是等待事件非常小,不超過一個時間單位,所以沒有記錄。
- waited known time:一旦會話等待了資源然後得到了,那麼狀態將從waiting進駐waited known time。
*記住記錄在v$session_event中的等待事件記錄在當前等待的資源沒有等到之前是不會更新的。所以如果一個等待事件等待的事件非常長,那麼將很明顯的看到,在v$session_wait中的統計資訊將持續增加而相應v$session_event中的資訊保持不變。
發現系統變慢時,首先透過v$system_event從系統級進行收集,不僅僅要看累計的系統等待事件資訊,更重要的時一段時間內等待的時間增量。然後透過產看v$session_wait檢視,可以判斷具體問題。例如,如果發生i/o競爭,原因是由於對索引的訪問還是大量的全表掃描等等。如果命中率低,不要著急看看有沒有相關的等待事件,如果沒有就不用擔心。相反,如果命中率很高,卻存在大量的等待,原因有可能資料快取記憶體區過大,超過了實體記憶體的大小,帶來了大量的分頁交換。
帶有函式或者表示式的where語句,欄位上的索引是不會被用到的,會引起全表掃描。
總結:
瞭解應用的需求,確定為什麼要使用to_char函式遮蔽status欄位索引的使用。
調整收集到的sql語句書寫,減少全表掃描的發生,從而減少相應的i/o操作
考慮在索引上使用nologging,減少表中資料維護相應的索引維護產生的重做日誌。
減少重做日誌檔案所在磁碟上無關緊要的i/o操作,如果必要,將重做日誌檔案移動到新的磁碟上。
從長遠考慮,增加重做日誌檔案組的個數和組員檔案的大小以防止其他重做日誌相關的等待事件的發生。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8570952/viewspace-713607/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 效能測試瓶頸調優
- 效能測試-服務端瓶頸分析思路服務端
- 如何正確定義效能瓶頸
- 用 pprof 找出程式碼效能瓶頸
- 利用PerfDog分析遊戲效能瓶頸遊戲
- Chrome執行時效能瓶頸分析Chrome
- 效能測試瓶頸之CPU問題分析與調優
- 效能課堂-TPS 瓶頸精準定位
- LightDB資料庫效能瓶頸分析(一)資料庫
- 實時監控網路流量,精準辨別網路效能瓶頸
- 軟體測試:瓶頸分析方法
- 漫談前端效能 突破 React 應用瓶頸前端React
- 2020.10.6 效能課堂筆記-cpu 瓶頸分析筆記
- 實用技巧:快速定位Zuul的效能瓶頸Zuul
- I/O已經不再是效能瓶頸
- 突破效能瓶頸,實現流程自動化
- [20191119]測試dbms_system.wait_for_event.txtAI
- 使用 sar 和 kSar 來發現 Linux 效能瓶頸Linux
- SQL Server 資料庫 最佳化 效能瓶頸SQLServer資料庫
- 效能之殤:從馮·諾依曼瓶頸談起
- 擴充套件jwt解決oauth2 效能瓶頸套件JWTOAuth
- 高併發下log4j的效能瓶頸
- 2020.10.8 效能課堂筆記-記憶體瓶頸分析筆記記憶體
- 在Linux中,如何進行系統效能瓶頸分析?Linux
- 五個容易錯過的 PostgreSQL 查詢效能瓶頸SQL
- 伺服器IO瓶頸對MySQL效能的影響伺服器MySql
- 顯示卡瓶頸是什麼,如何識別顯示卡GPU瓶頸並解決以提升PC效能GPU
- 前端瓶頸如何打破???前端
- 如何突破前端瓶頸???前端
- 我是怎麼一步步用go找出壓測效能瓶頸Go
- 效能測試如何定位瓶頸?偶發超時?看高手如何快速排查問題
- Redis效能瓶頸揭秘:如何最佳化大key問題?Redis
- 人到中年了的瓶頸
- 軟體測試學習資源—瓶頸分析方法
- NVMe儲存效能瓶頸的主要來源:檔案系統
- 打破儲存效能瓶頸,杉巖資料為AI提速增效AI
- printStackTrace()造成的併發瓶頸
- 打破Kafka帶來的瓶頸?Kafka
- 資料庫叢集伺服器系統效能瓶頸分析(zt)資料庫伺服器