通过shell脚本定位性能sql和生成报告

简介: oracle的sql monitor是一个很有用的工具集。但是通过sql命令和反复去调用dbms_tune来传入参数等等操作感觉挺费事的。 可以通过如下的脚本来定位sql monitor中的性能sql,发现一些潜在的性能问题。
oracle的sql monitor是一个很有用的工具集。但是通过sql命令和反复去调用dbms_tune来传入参数等等操作感觉挺费事的。
可以通过如下的脚本来定位sql monitor中的性能sql,发现一些潜在的性能问题。
这个脚本可以定位正在sql monitor监控范围内的sql语句。

MONITOR_OWNER=`sqlplus -silent $DB_CONN_STR@$SH_DB_SID set pages 100
set linesize 200
col status format a20
col username format a15
col module format a20
col program format a25
col sql_id format a20
col sql_text format a20
select 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_GRO
cjqdgd14xjwjm        DONE (ALL ROWS)      TEST_USER         JDBC Thin Client     JDBC Thin Client          SELECT TO_CHAR (SUBS
2zymmn3s4xn1k        DONE (ALL ROWS)      TEST_USER         JDBC Thin Client     JDBC Thin Client          SELECT      nrg."Cyc
1hg2wcuapy3y3        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 100
set linesize 200
col status format a20
col username format a15
col module format a20
col program format a25
col sql_id format a20
col sql_text format a20
select 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 99999
set pages 0
set linesize 200
col status format a20
col username format a30
col module format a20
col program format a20
col sql_id format a20
col sql_text format a50
col comm format a200
set long 999999
SELECT dbms_sqltune.report_sql_monitor(
sql_id => '$1',
report_level => 'ALL',
type=>' TEXT'
) comm 
FROM dual;  


EOF

如果要查看html格式的,直接替换上述标黄的部分为HTML即可。
生成的报告可读性很好,可以很容易看到瓶颈倒底在哪儿

SQL Monitoring Report


SQL Text

xxxxxxxxxxxxxx

Global Information:  DONE (ALL ROWS)
Instance ID : 1
Buffer Gets IO Requests Database Time Wait Activity

.

90637

.

.

1632

.

.

11s

.

.

.

100%
Session : xxxxxxxx (4940:57969)
SQL ID : cjqdgd14xjwjm
SQL Execution ID : 16783859
Execution Started : 07/17/2014 14:48:09
First Refresh Time : 07/17/2014 14:48:15
Last Refresh Time : 07/17/2014 14:48:20
Duration : 11s
Module/Action : JDBC Thin Client/-
Service : SYS$USERS
Program : JDBC Thin Client
PL/SQL Entry Ids : 2455820,1
PL/SQL Ids (Obj/Sub) : 2455820,1
Fetch Calls : 2

Binds
Name Position Type Value
:B2 1 NUMBER 10308170
:B1 2 NUMBER 6


SQL Plan Monitoring Details (Plan Hash Value=1125972187)
Id Operation Name Estimated
Rows
Cost Active Period 
(11s)
Execs Rows Memory
(Max)
Temp 
(Max)
IO Requests CPU Activity Wait Activity

.

0 SELECT STATEMENT

.

.

.

.

.

1 1

.

.

.

.

.

1 . SORT ORDER BY

.

6 67758

.

.

1 1 2.0KB

.

.

.

.

2 .. COUNT STOPKEY

.

.

.

.

.

1 1

.

.

.

.

.

3 ... VIEW xxxxxxxxxxxxx 577K 59898

.

.

1 1

.

.

.

.

.

4 .... SORT UNIQUE STOPKEY

.

577K 59898

.

.

1 1 2.0KB

.

.

.

.

5 ..... UNION-ALL

.

.

.

.

.

.

1 1

.

.

.

.


目录
相关文章
|
1天前
|
Unix Shell Linux
轻松编写 AIX Shell 脚本
轻松编写 AIX Shell 脚本
|
1天前
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
|
2天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
2天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
3天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
20 5
|
4天前
|
Shell 程序员 数据安全/隐私保护
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
|
4天前
|
存储 Shell C语言
shell脚本 编程 变量 基本入门(详解)
shell脚本 编程 变量 基本入门(详解)
|
4天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
13 3
|
10天前
|
弹性计算 运维 监控
|
10天前
|
存储 弹性计算 运维
自动化收集员工信息的Shell脚本
【4月更文挑战第30天】
10 0