shell脚本自动化采集性能sql

简介:

通过v$sql_monitor能够实时采集可能存在的sql性能问题,但是每次问题发生的时候采取采取措施就有点“晚”了,我们需要防患于未然,把一些潜在问题提前发现,并加以解决。

如果有些sql执行很频繁,我们需要得到一个执行的报告,但是因为sql执行很频繁,每次都生成一个报告就显得有些过于消耗资源了。
现在想达到的目标就是能够在每天早上上班的时候能够得到一些已经生成的报告。如果有些sql已经生成过报告了,就不需要重复生成报告了,这样一切问题都在监控之中。

采用的脚本如下:

DATE=`date '+%y%m%d'`
sqlplus -s n1/n1 < set pages 0
set feedback off
set linesize 100
set trimspool on
col sql_id format a50
spool tmp_monitor_sql.lst_$DATE
select sql_id from v\$sql_monitor where status='EXECUTING' and username='xxxx'
 group by sql_id;
spool off;
EOF

ls -lrt *_rpt.lst_$DATE*|grep -v tmp|awk -v DATE=$DATE 'BEGIN{FS="_rpt.lst_"} {print $1 }'|awk '{print $9}'|sort > tmp_current_exist_sql
sort tmp_monitor_sql.lst_$DATE > monitor_sql.lst_$DATE
comm -13 tmp_current_exist_sql monitor_sql.lst_$DATE > tmp_monitor_sql_minus.lst

issue_sql_cnt=`cat tmp_monitor_sql_minus.lst|wc -l`
for((i=1;i< ${issue_sql_cnt};i++))
do
tmp_sql_id=`sed -n ''$i'p' tmp_monitor_sql_minus.lst`


sqlplus -s  n1/n1 < set pages 0
set linesize 150
col comm format a200
set long 99999
spool ${tmp_sql_id}_rpt.lst_$DATE
SELECT dbms_sqltune.report_sql_monitor(
sql_id => '$tmp_sql_id',
report_level => 'ALL',
type=>'HTML'
) comm
FROM dual;
spool off;
EOF
done


rm tmp_monitor_sql_minus.lst
rm  tmp_monitor_sql.lst_$DATE
rm tmp_current_exist_sql
rm  monitor_sql.lst_$DATE

脚本运行后结果如下:
如果有sql在运行超过5秒,耗用了大量的资源,就会被记录下来。

[ora11g@rac1 tmp]$ ll
total 876
-rw-r--r-- 1 ora11g dba 103889 Jul 20 03:44 4dtvhq9n8s751_rpt.lst_140720
-rw-r--r-- 1 ora11g dba  77917 Jul 20 03:44 5zruc4v6y32f9_rpt.lst_140720
-rw-r--r-- 1 ora11g dba 403473 Jul 20 03:44 63n9pwutt8yzw_rpt.lst_140720
-rw-r--r-- 1 ora11g dba 119744 Jul 20 03:44 7hdtv2wcb63my_rpt.lst_140720

如果下次运行脚本,报告已经存在,就不会重复生成报告了。
可以把这个脚本设为crontab或者nohup模式。

本文转自ICT时空dbasdk的博客,原文链接: shell脚本自动化采集性能sql ,如需转载请自行联系原博主。

相关文章
|
4月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
4月前
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
|
4月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
8月前
|
数据采集
使用 Puppeteer 绕过 Captcha:实现商家数据自动化采集
本文介绍了如何使用Puppeteer结合代理IP和用户伪装技术,轻松绕过大众点评的Captcha验证,实现商家信息的高效采集。通过配置Puppeteer、设置代理和用户伪装参数、模拟人类操作等步骤,成功提取了目标页面的数据。该方法不仅提高了爬虫的稳定性和隐蔽性,还为市场研究和商业分析提供了有力支持。注意,数据采集需遵守法律法规及网站政策。
254 1
使用 Puppeteer 绕过 Captcha:实现商家数据自动化采集
|
9月前
|
SQL 关系型数据库 MySQL
|
8月前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
87 0
|
11月前
|
存储 SQL Go
全网最长的sql server巡检脚本分享(1000行)
全网最长的sql server巡检脚本分享(1000行)
194 1
|
11月前
|
SQL 存储 Go
SQL Server一键巡检脚本分享
SQL Server一键巡检脚本分享
352 0
|
SQL Shell Perl
使用shell自动化诊断性能问题(一)(r11笔记第41天)
一直以来要做性能分析的自动化工作,但是久久没有动笔,今天索性来更新一版。 首先我希望得到的一个基本效果就是后台去扫描数据库的DB time,如果超出了阈值,比如这里我设置的为400(即DB time为400%),则会开启自动诊断的任务。
964 0
|
4月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。