SQL 調優一般思路
一般來說,調優的第一手資料中,如何根據報告來判斷是哪些SQL消耗了最多的系統資源?哪些SQL是最需要調整的呢?這裡給出了一個大致的最佳化思路。
一般來說,需要關注下面四種Top SQL
- 消耗最多CPU的(邏輯IO過多)
- 導致過多物理I/O的
- 執行次數較頻繁的
- 執行時間較長的
我們知道,一個語句的響應時間有個很著名的公式:
響應時間=服務時間+等待時間
其中服務時間就是CPU為執行該語句花費的時間。
服務時間=分析時間+遞迴時間+執行時間
分析時間是CPU用於分析語句的時間,遞迴時間是CPU用於語句的遞迴SQL的時間,剩下的則就是CPU用於執行語句的真正時間了。
那麼,上面的這些時間資訊從哪裡來的?Oracle提供的系統統計資訊中就有部分的時間統計資訊:
- 服務時間=CPU used by this session
- 分析時間=parse time cpu
- 遞迴時間=recursive cpu usage
那麼,執行時間就可以根據上面三個統計資訊計算得出:
執行時間=CPU used by this session – parse time cpu – recursive cpu usage
- 如果執行時間在整個響應時間中佔較大的比例,那麼下一步就是找出那些造成了最多邏輯IO的SQL語句,可以從statspack報告的SQL ordered by Gets部分找到。
- 如果分析時間在整個響應時間中佔較大的比例,那麼下一步就是查詢哪些SQL分析過多,這在statspack報告中在SQL ordered by Parse Calls中列出。
- 如果等待時間在整個響應時間中佔較大的比例,並且主要是塊讀取相關的等待時,下一步就是找出哪些SQL造成了過多的物理讀,可以檢視statspack報告中的SQL ordered by Reads部分。
那麼,根據上面列出的一個簡單的原則,我們需要關注三個關於CPU時間的統計資訊: CPU used by this session, parse time cpu和recursive cpu usage,以及top5等待事件中和IO相關的等待時間。如果是其他的一些等待事件出現在Top5中,那麼可能需要根據不同的等待事件來分析原因了。然後優先調優時間消耗最多的相關SQL。
除了上面的SQL ordered by Gets(邏輯IO最多),SQL ordered by Parse Calls(軟解析過多),SQL ordered by Reads(物理IO過多),statspack還按照其他的一些方式列出了Top SQL,這些Top SQL在某些情況下都是需要給予特別關注的。比如:
SQL ordered by Executions 執行次數超過100的
SQL ordered by Sharable Memory 佔用library cache超過1M的
SQL ordered by Version Count 子cursor超過20的
如果沒有statspack,那麼根據v$sysstat/v$sesstat中的統計資訊,結合v$sql/v$sqlarea,一樣可以得到相關的SQL。
v$sql對於每一個子cursor都有一行統計記錄,而v$sqlarea則對同一個父cursor只有一行統計記錄,也就是v$sqlarea是對v$sql按照父cursor進行group by後的一個結果。這兩個檢視中都有諸如buffer_gets,parse_calls,disk_reads,,executions,sharable_mem等列,和報告列出Top SQL的條件對應。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20674423/viewspace-2701902/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 慢Sql優化思路SQL優化
- 主從延遲調優思路
- MySQL調優篇 | SQL調優實戰(5)MySql
- SQL Server一次SQL調優案例SQLServer
- Oracle SQL調優系列之SQL Monitor ReportOracleSQL
- MindSpore模型精度調優實戰:常用的定位精度除錯調優思路模型除錯
- Oracle 效能調優工具:SQL MonitorOracleSQL
- 效能調優——SQL最佳化SQL
- 記一次SQL Server刪除SQL調優SQLServer
- SQL調優13連問,收藏好!SQL
- MySQL 索引和 SQL 調優總結MySql索引
- Oracle SQL調優之分割槽表OracleSQL
- Linux效能調優從最佳化思路說起Linux
- 記一次SQL調優過程SQL
- 大廠都是怎麼SQL調優的?SQL
- mysql調優從書寫sql開始MySql
- Oracle 高效能SQL引擎剖析--SQL優化與調優機制詳解OracleSQL優化
- 你們一般都是怎麼進行SQL調優的?MySQL在執行時是如何選擇索引的?MySql索引
- Oracle 調優確定存在問題的SQLOracleSQL
- 資料庫SQL調優的幾種方式資料庫SQL
- 處理高併發的一般思路
- K-th 問題的一般思路
- 如何調優 Oracle SQL系列文章:查詢優化器介紹OracleSQL優化
- 大廠是怎麼進行SQL調優的?SQL
- TiDB SQL調優案例之避免TiFlash幫倒忙TiDBSQL
- 技能篇:linux服務效能問題排查及jvm調優思路LinuxJVM
- 效能測試調優應該注意哪些要點,一般效能測試調優的步驟-Alltesting|澤眾雲測試
- Hive-常見調優方式 && 兩個面試sqlHive面試SQL
- SQL慢查詢排查思路SQL
- SQL調優工具包DBMS_SQLTUNE的使用方法SQL
- PostgreSQL技術大講堂 - 第31講:SQL調優技巧SQL
- 一次SQL調優 聊一聊 SQLSERVER 資料頁SQLServer
- Spark 效能調優--資源調優Spark
- SQL優化案例 - 從Exadata遷移到國產沃趣一體機一般方法探究(四)SQL優化
- SQL優化案例 | 從Exadata遷移到國產沃趣一體機一般方法探究(四)SQL優化
- 調優 | Apache Hudi應用調優指南Apache
- JAVA效能優化思路探究Java優化
- 【Java效能優化思路方向】Java優化