日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL调优和性能监控利器SQL Monitor

發布時間:2023/12/18 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL调优和性能监控利器SQL Monitor 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL Monitor是Oracle官方提供的自動監控符合特定條件的SQL,用于收集執行時的細節信息的監控工具,常用于SQL調優和系統性能監控。

Oracle 11g中,當SQL滿足以下條件之一就會被SQL Monitor捕獲到,監控數據被記錄在v$sql_monitor視圖中,

(1) 當SQL并行執行時,會立即被實時監控到。

(2) 當SQL單進程運行時,如果消耗超過5秒的CPU或I/O時間,會監控到。

(3) 使用/*+ monitor */提示的SQL語句。

另外一個前提,就是以下兩個參數的設置,

(1) statistics_level級別必須是TYPICAL或者ALL。

(2) control_management_pack_access設置為'DIAGNOSTIC+TUNING'。

SQL Monitor在Oracle企業版數據庫中是免費使用的,打開SQL Monitor Report有兩種形式,一個就是通過Oracle EM,中文名稱是“SQL監控”,

另外一種獲得SQL Monitor Report的形式就是通過dbms_sqltune包,這可能是我們經常用到的,一個原因是我們未必能使用圖形界面,尤其是生產環境,端口都是禁用的,另外一個原因,就是我們能在監控腳本中調用dbms_sqltune,便于編寫我們的監控邏輯。

我們嘗試通過dbms_sqltune看下這個SQL Monitor Report。

(1) 確認參數

SQL> show parameter statistics_level NAME?????????????????????????????????TYPE????????VALUE ------------------------------------ ----------- ------------------------------ statistics_level?????????????????????string??????TYPICALSQL>?show?parameter?control_management_pack_access; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_management_pack_access string DIAGNOSTIC+TUNING

(2) 確定要監控的SQL ID

其實就是確定什么樣的SQL會記錄到v$sql_monitor視圖中,這里我們采用hint,讓SQL進入v$sql_monitor,

SQL> select /*+ monitor */ type, count(*) from v$lock group by type; TY???COUNT(*) -- ---------- CF 1 KT 3 RD 1 KD 1 XR 1 RT 1 AE 7 TS 2 RS 1 TO 3 MR?????????14

可從v$sql或者v$sql_monitor找到這條SQL的ID,

SQL>?select?sql_id,sql_text?from?v$sql_monitor?where?sql_text?like?'%v$lock%'; SQL_ID SQL_TEXT ------------------------------------------------------------------------------ 02qa4khbuqv92 select /*+ monitor */ type, count(*) from v$lock group by type

(3)?dbms_sqltune

通過設置set,格式化輸出,還可以選擇spool,將輸出打印到本地文件中,其中dbms_sqltune.report_sql_monitor可以指定報告的格式,包括'TEXT'、'HTML'、'XML' 、'ACTIVE'(只在11g R2以后才支持),

SQL> set long 1000000 SQL> set longchunksize 100000 SQL> set linesize 1000 SQL> set pagesize 0 SQL> set trim on SQL> set trimspool on SQL> set echo off SQL> set feedback off SQL> spool report_sql_monitor.txt SQL> select dbms_sqltune.report_sql_monitor(sql_id=>'02qa4khbuqv92', type=>'TEXT', report_level=>'ALL') as report from dual; SQL Monitoring ReportSQL Text ------------------------------ select /*+ monitor */ type, count(*) from v$lock group by typeGlobal Information ------------------------------Status : DONE (ALL ROWS)Instance ID : 1Session : SYS (1:38345)SQL ID : 02qa4khbuqv92SQL Execution ID : 16777216Execution?Started???:??02/05/2022?15:20:01First?Refresh?Time??:??02/05/2022?15:20:01Last?Refresh?Time???:??02/05/2022?15:20:01Duration : .027419sModule/Action : sqlplus@centos (TNS V1-V3)/-Service : SYS$USERSProgram : sqlplus@centos (TNS V1-V3)Fetch?Calls?????????:??2Global Stats ======================================== | Elapsed | Cpu | Other | Fetch | | Time(s) | Time(s) | Waits(s) | Calls | ======================================== | 0.03 | 0.01 | 0.02 | 2 | ========================================SQL?Plan?Monitoring?Details?(Plan?Hash?Value=3191625931) ============================================================================================================================================== | Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Mem | Activity | Activity Detail | | | | | (Estim) | | Active(s) | Active | | (Actual) | (Max) | (%) | (# samples) | ============================================================================================================================================== | 0 | SELECT STATEMENT | | | | 1 | +0 | 1 | 11 | . | | | | 1 | HASH GROUP BY | | 29 | 2 | 1 | +0 | 1 | 11 | 1MB | | | | 2 | HASH JOIN | | 5576 | 1 | 1 | +0 | 1 | 35 | 1MB | | | | 3 | HASH JOIN | | 242 | 1 | 1 | +0 | 1 | 35 | 2MB | | | | 4 | VIEW | GV$_LOCK | 242 | 1 | 1 | +0 | 1 | 37 | . | | | | 5 | UNION-ALL | | | | 1 | +0 | 1 | 37 | . | | | | 6 | FILTER | | | | 1 | +0 | 1 | 37 | . | | | | 7 | VIEW | GV$_LOCK1 | 234 | 1 | 1 | +0 | 1 | 37 | . | | | | 8 | UNION-ALL | | | | 1 | +0 | 1 | 37 | . | | | | 9 | FIXED TABLE FULL | X$KDNSSF | 1 | | | | 1 | | . | | | | 10 | FIXED TABLE FULL | X$KSQEQ | 233 | 1 | 1 | +0 | 1 | 37 | . | | | | 11 | FIXED TABLE FULL | X$KTADM | 1 | | | | 1 | | . | | | | 12 | FIXED TABLE FULL | X$KTATRFIL | 1 | | | | 1 | | . | | | | 13 | FIXED TABLE FULL | X$KTATRFSL | 1 | | | | 1 | | . | | | | 14 | FIXED TABLE FULL | X$KTATL | 1 | | | | 1 | | . | | | | 15 | FIXED TABLE FULL | X$KTSTUSC | 1 | | | | 1 | | . | | | | 16 | FIXED TABLE FULL | X$KTSTUSS | 1 | | | | 1 | | . | | | | 17 | FIXED TABLE FULL | X$KTSTUSG | 1 | | | | 1 | | . | | | | 18 | FIXED TABLE FULL | X$KTCXB | 1 | | | | 1 | | . | | | | 19 | FIXED TABLE FULL | X$KSUSE | 472 | | 1 | +0 | 1 | 472 | . | | | | 20 | FIXED TABLE FULL | X$KSQRS | 2304 | | 1 | +0 | 1 | 2304 | . | | | ==============================================================================================================================================SQL> spool off

如果選擇HTML格式的,

select dbms_sqltune.report_sql_monitor(sql_id=>'02qa4khbuqv92', type=>'HTML', report_level=>'ALL') as report from dual;

就得到了HTML的SQL Monitor Report,

結合SQL Monitor Report,我們就可以關注其中存在的一些問題,例如通常會根據最右邊CPU和wait的activity,找到SQL執行計劃中資源消耗較高的步驟。然后看下Oracle估算的返回行數和實際的返回行數是否相差很大,如果估算的行數和實際的行數相差不大,至少表明目前對應數據庫對象上的統計信息是準確的,否則就可能存在統計信息不準的問題。還可以關注SQL的篩選條件,判斷是否使用了正確的索引等優化手段。

可以說SQL Monitor是個有效采集信息便于診斷SQL性能問題的一個“可視化”工具,但具體的問題和原因,還是要具體分析,看到的,未必是真實的,就像破案一樣,這可能才是調優的樂趣所在。

近期更新的文章:

《spool導出格式的問題》

《最近碰到的一些問題》

《關于數據治理的讀書筆記 - 什么是數據治理?》

《關于數據治理的讀書筆記 - 數據治理、數據管理和數據管控的理解》

《通過Java得到語句的執行計劃》

文章分類和索引:

《公眾號900篇文章分類和索引》

總結

以上是生活随笔為你收集整理的SQL调优和性能监控利器SQL Monitor的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。