shell指令碼自動化採集效能sql
透過v$sql_monitor能夠實時採集可能存在的sql效能問題,但是每次問題發生的時候採取採取措施就有點“晚”了,我們需要防患於未然,把一些潛在問題提前發現,並加以解決。
如果有些sql執行很頻繁,我們需要得到一個執行的報告,但是因為sql執行很頻繁,每次都生成一個報告就顯得有些過於消耗資源了。
現在想達到的目標就是能夠在每天早上上班的時候能夠得到一些已經生成的報告。如果有些sql已經生成過報告了,就不需要重複生成報告了,這樣一切問題都在監控之中。
採用的指令碼如下:
DATE=`date '+%y%m%d'`
sqlplus -s n1/n1 <<EOF
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 <<EOF
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模式。
如果有些sql執行很頻繁,我們需要得到一個執行的報告,但是因為sql執行很頻繁,每次都生成一個報告就顯得有些過於消耗資源了。
現在想達到的目標就是能夠在每天早上上班的時候能夠得到一些已經生成的報告。如果有些sql已經生成過報告了,就不需要重複生成報告了,這樣一切問題都在監控之中。
採用的指令碼如下:
DATE=`date '+%y%m%d'`
sqlplus -s n1/n1 <<EOF
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 <<EOF
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模式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-1963520/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android 自動化測試及效能資料採集的 Python 指令碼AndroidPython指令碼
- 自動化指令碼安裝mysql shell指令碼範例指令碼MySql
- 案例八:Shell自動化管理賬號指令碼指令碼
- linux透過shell指令碼實現ssh互動式自動化Linux指令碼
- [python] request 介面測試自動化指令碼轉化為 [locust] 效能測試指令碼Python指令碼
- shell 備份檔案指令碼+自動清理指令碼
- Shell指令碼 | 效能測試之啟動時間指令碼
- specjvm自動化指令碼JVM指令碼
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- 如何讓shell指令碼自殺指令碼
- Dockerfile---指令碼自動化Docker指令碼
- vue自動化部署指令碼Vue指令碼
- [shell]shell指令碼實現每天自動抽取資料插入hive表指令碼Hive
- 拼多多商品全流程自動化採集
- java 自動升級sql指令碼 flyway 工具JavaSQL指令碼
- shell指令碼-免互動指令碼
- MySQL5.7/8.0效能分析shell指令碼MySql指令碼
- mydumper自動化安裝指令碼指令碼
- JMeter 介面自動化測試(手工轉自動化指令碼)JMeter指令碼
- flyway實現java 自動升級SQL指令碼JavaSQL指令碼
- 【資訊採集】IBM AIX系統硬體資訊檢視命令(shell指令碼)IBMAI指令碼
- shell指令碼指令碼
- 自動定時備份 mysql 資料庫 的 shell 指令碼MySql資料庫指令碼
- 自動批次實現linux機器ssh免密shell指令碼Linux指令碼
- 用於自動監控磁碟使用情況的 Shell 指令碼指令碼
- 自動輸入密碼使用root許可權開啟shell指令碼密碼指令碼
- shell自動化輸入
- 介面自動化指令碼設計規範指令碼
- web自動化測試框架-06 如何快速編寫自動化指令碼Web框架指令碼
- shell指令碼(3)-格式化輸出指令碼
- 微信桌布小程式原始碼 自動採集小米桌布原始碼
- shell指令碼案例指令碼
- 常用shell指令碼指令碼
- Linux Shell指令碼Linux指令碼
- shell擴充套件——免互動指令碼套件指令碼
- shell指令碼(6)-shell陣列指令碼陣列
- 自動化瓦力多渠道打包python指令碼Python指令碼
- pyautogui模組,PC自動化指令碼,控制滑鼠GUI指令碼
- Docker化自動採集&模擬惡意軟體環境Docker