通过shell脚本定位性能sql和生成报告
发布日期:2021-09-08 15:09:15 浏览次数:9 分类:技术文章

本文共 2729 字,大约阅读时间需要 9 分钟。

oracle的sql monitor是一个很有用的工具集。但是通过sql命令和反复去调用dbms_tune来传入参数等等操作感觉挺费事的。

可以通过如下的脚本来定位sql monitor中的性能sql,发现一些潜在的性能问题。
这个脚本可以定位正在sql monitor监控范围内的sql语句。

MONITOR_OWNER=`sqlplus -silent $DB_CONN_STR@$SH_DB_SID < set pages 100set linesize 200col status format a20col username format a15col module format a20col program format a25col sql_id format a20col sql_text format a20select sql_id,STATUS  ,  USERNAME  ,  MODULE ,   PROGRAM, substr(SQL_TEXT,0,20) sql_text from v\\$sql_monitor where username =upper('$1') group by sql_id,STATUS  ,  USERNAME  ,  MODULE ,   PROGRAM, substr(SQL_TEXT,0,20); exit; END` if [ -z "$MONITOR_OWNER" ]; then  echo "no object exists, please check again"  exit 0 else  echo '*******************************************' echo " $MONITOR_OWNER    "  echo '*******************************************'fi

脚本运行结果如下,可以显示sql_id和状态,还有简单的sql语句。

尤其可以重点关注那些正在执行的语句。

SQL_ID               STATUS               USERNAME        MODULE               PROGRAM                   SQL_TEXT              -------------------- -------------------- --------------- -------------------- ------------------------- --------------------  7u9gsk798bvrp        DONE (ALL ROWS)      TEST_USER         JDBC Thin Client     JDBC Thin Client          SELECT   AA.DATA_GROcjqdgd14xjwjm        DONE (ALL ROWS)      TEST_USER         JDBC Thin Client     JDBC Thin Client          SELECT TO_CHAR (SUBS2zymmn3s4xn1k        DONE (ALL ROWS)      TEST_USER         JDBC Thin Client     JDBC Thin Client          SELECT      nrg."Cyc1hg2wcuapy3y3        EXECUTING            TEST_USER         JDBC Thin Client     JDBC Thin Client          select d1_run_reque

如果要生成sql monitor报告。

可以采用如下的脚本

MONITOR_OWNER=`sqlplus -silent $DB_CONN_STR@$SH_DB_SID < set pages 100set linesize 200col status format a20col username format a15col module format a20col program format a25col sql_id format a20col sql_text format a20select sql_id,STATUS  ,  USERNAME  ,  MODULE ,   PROGRAM, substr(SQL_TEXT,0,20) sql_text from v\\$sql_monitor where sql_id='$1' group by sql_id,STATUS  ,  USERNAME  ,  MODULE ,   PROGRAM, substr(SQL_TEXT,0,20) ; exit; END` if [ -z "$MONITOR_OWNER" ]; then  echo "no object exists, please check again"  exit 0 else  echo '*******************************************' echo " $MONITOR_OWNER    "  echo '*******************************************'fi sqlplus -silent $DB_CONN_STR@$SH_DB_SID < set long 99999set pages 0set linesize 200col status format a20col username format a30col module format a20col program format a20col sql_id format a20col sql_text format a50col comm format a200set long 999999SELECT dbms_sqltune.report_sql_monitor(sql_id => '$1',report_level => 'ALL',type=>'TEXT') comm FROM dual;  EOF

本文转自ICT时空dbasdk的博客,原文链接:,如需转载请自行联系原博主。

转载地址:https://blog.csdn.net/weixin_34326429/article/details/90161987 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Delphi Dbgrid滚轮问题解决
下一篇:cg数据类型

发表评论

最新留言

不错!
[***.144.177.141]2024年04月05日 12时01分06秒