美文网首页
DBMS_SQLTUNE.REPORT_SQL_MONITOR

DBMS_SQLTUNE.REPORT_SQL_MONITOR

作者: 答春竹 | 来源:发表于2020-12-02 17:26 被阅读0次
    SQL_MONITOR

    SQL_MONITOR是一个比较好的查看真正执行计划的方式
    可以从以下方式获取

    • Enterprise Manager-->性能-->性能中心-->SQL MONITOR
    • SQL Developer-->工具-->实时SQL监视
    • DBMS_SQLTUNE包
    SQL_MONITOR为SQL开启监视的条件:

    statistics_level 为'TYPICAL' 或者 'ALL'以及CONTROL_MANAGEMENT_PACK_ACCESS 'DIAGNOSTIC+TUNING'.

    SQL> SHOW PARAMETER statistics_level
    
    NAME                     TYPE    VALUE
    ------------------------------------ ----------- ------------------------------
    statistics_level             string  TYPICAL
    
    SQL> SHOW PARAMETER control_management_pack_access
    
    NAME                     TYPE    VALUE
    ------------------------------------ ----------- ------------------------------
    control_management_pack_access       string  DIAGNOSTIC+TUNING
    

    自动监视需要SQL在并行parallel或者执行时间超过5S
    可以手动给sql加hint 以达到SQL监视的效果/*+ MONITOR */
    如:

    SELECT /*+ MONITOR */ * from user_tables;
    
    DBMS_SQLTUNE.REPORT_SQL_MONITOR的参数:
    • SQL_ID SQL的ID,为空则获取的最新的SQL_ID
    • SQL_EXEC_ID 指定SQL_ID时,SQL_EXEC_ID指定对应单个执行,为NULL则获取最新的SQL_ID
    • REPORT_LEVEL 可以为'NONE', 'BASIC', 'TYPICAL' , 'ALL' ,一般选ALL
    • TYPE 可以选'TEXT', 'HTML', 'XML' , 'ACTIVE' 从11G R2开始可以选ACTIVE,界面好看些
    • SESSION_ID 可以指定SESSION_ID,也可以用SYS_CONTEXT('USERENV','SID')获取当前SESSION_ID
    V$SQL_MONITOR

    可以通过V$SQL_MONITOR视图查看当前正在监视的所有SQL

    使用方式

    能提前获取SQL_ID,可从v$sql,v$sql_area,v$sql_monitor查看,直接替换sql_id内容即可

    SET LONG 1000000
    SET LONGCHUNKSIZE 1000000
    SET LINESIZE 1000
    SET PAGESIZE 0
    SET TRIM ON
    SET TRIMSPOOL ON
    SET ECHO OFF
    SET FEEDBACK OFF
    
    SPOOL /home/oracle/report_sql_monitor1.htm
    SELECT DBMS_SQLTUNE.report_sql_monitor(
      sql_id       => '526mvccm5nfy4',
      type         => 'ACTIVE',
      report_level => 'ALL') AS report
    FROM dual;
    SPOOL OFF
    

    如果可以跑SQL,则跑完sql后直接获取

    SET LONG 1000000
    SET LONGCHUNKSIZE 1000000
    SET LINESIZE 1000
    SET PAGESIZE 0
    SET TRIM ON
    SET TRIMSPOOL ON
    SET ECHO OFF
    SET FEEDBACK OFF
    select /* MONITOR */ * from user_tables;
    SPOOL /home/oracle/report_sql_monitor2.htm
    select dbms_sqltune.report_sql_monitor(
      type=>'active', 
      session_id=>userenv('sid'),
    report_level=>'ALL') AS report 
    from dual;
    SPOOL OFF
    

    也可以从pl/sql跑出来后直接选择html保存:

    select /* MONITOR */ * from user_tables;
    select dbms_sqltune.report_sql_monitor(type=>'active', session_id=>userenv('sid'),report_level=>'ALL') monitor_report from dual;
    

    点击... -->HTML-->另存为

    相关文章

      网友评论

          本文标题:DBMS_SQLTUNE.REPORT_SQL_MONITOR

          本文链接:https://www.haomeiwen.com/subject/fukuwktx.html