通過shell指令碼監控sql執行頻率
在生產環境中,可能會存在各種潛在的sql問題,比如由於硬體資源導致,如果影響到了IO,CPU,就會導致一些本來執行很快的sql語句變慢或者系統響應嚴重減緩。
比如由於資料庫的一些設定導致執行計劃的問題,sql_profile導致的執行計劃穩定帶來的效能不穩定,表中統計資訊的變更導致的執行計劃的變化等等。
有時候等到問題發生的時候,可能已經發生較長的一段時間了。如果想一下子定位問題還是很困難的,在sql_id沒有發生變化的情況下,如果要檢視語句的執行頻率,一種可能就是通過在awr中篩查,但是可行性太差。畢竟耗時費力,還不靈活,很有可能問題sql的執行時間再特定的幾個時間段內,那麼完整的抽取也就有些冗餘了,針對性不強。這個時候可以使用指令碼來抽取DBA_HIST_SQLSTAT的資訊,然後結合快照資訊,得到一個快照級的sql語句執行情況。
shell指令碼的內容如下:
sqlplus -s $DB_CONN_STR@$SH_DB_SID <
col BEGIN_INTERVAL_TIME format a30
set pages 50
select * from (
select
BEGIN_INTERVAL_TIME,
SQL_ID,
sum(CPU_TIME_DELTA),
sum(DISK_READS_DELTA),
sum(Executions_total),
sum(EXECUTIONS_DELTA),
count(*)
from
DBA_HIST_SQLSTAT a, dba_hist_snapshot s
where
s.snap_id = a.snap_id
and to_char(s.begin_interval_time,'yyyymmdd')='$3'
and EXTRACT(HOUR FROM S.END_INTERVAL_TIME) between $1 and $2
and sql_id='$4'
group by
SQL_ID,
executions_total,
EXECUTIONS_DELTA,
BEGIN_INTERVAL_TIME
order by
sum(CPU_TIME_DELTA) desc)
where rownum <20;
exit
EOF
執行指令碼的情況如下:
我們想檢視在2014年11月9號的1點到22點之間,sql_id 7sx5p1ug5ag12的執行頻率,得到的結果如下:
ksh showsqlhist.sh 1 22 20141109 7sx5p1ug5ag12
BEGIN_INTERVAL_TIME SQL_ID SUM(CPU_TIME_DELTA) SUM(DISK_READS_DELTA) SUM(EXECUTIONS_TOTAL) SUM(EXECUTIONS_DELTA) COUNT(*)
------------------------------ ------------- ------------------- --------------------- --------------------- --------------------- ----------
09-NOV-14 05.00.39.436 AM 7sx5p1ug5ag12 1071833 0 59785 11712 1
09-NOV-14 12.00.25.211 AM 7sx5p1ug5ag12 1040858 0 48075 12052 1
可以簡單的驗證一下。比如我們想檢視12:00左右的時候sql_id 7sx5p1ug5ag12 的執行情況。來得到一個awr報告。
Executions | Rows Processed | Rows per Exec | Elapsed Time (s) | %CPU | %IO | SQL Id | SQL Module | SQL Text |
---|---|---|---|---|---|---|---|---|
12,052 | 12,052 | 1.00 | 1.03 | 101.5 | 0 | 7sx5p1ug5ag12 | DBMS_SCHEDULER | SELECT SPARE4 FROM SYS.OPTSTAT... |
或者來反證,可能絕大多數時候發現問題的時候,我們會生成awr報告,如果看到某些sql語句可能存在問題,可以使用指令碼得到一個語句的執行頻率,結合快照來看更加具有針對性。
對於排查問題來說還是有一定的幫助的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1327832/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過shell指令碼監控sql執行頻率指令碼SQL
- 通過shell指令碼監控日誌切換頻率指令碼
- 透過shell指令碼監控日誌切換頻率指令碼
- 通過shell指令碼監控oracle session指令碼OracleSession
- 透過shell指令碼監控oracle session指令碼OracleSession
- 監控sqlldr執行指令碼SQL指令碼
- 【shell】磁碟監控指令碼指令碼
- 【SQL監控】SQL完全監控的指令碼SQL指令碼
- 通過shell指令碼同時監控多個資料庫負載指令碼資料庫負載
- oracle會話監控shell指令碼Oracle會話指令碼
- Shell 系統資訊監控指令碼指令碼
- 執行shell指令碼指令碼
- 通過spid,查詢執行慢的sql指令碼SQL指令碼
- 歸檔告警頻繁監控指令碼指令碼
- 通過shell指令碼來得到不穩定的執行計劃指令碼
- 通過shell指令碼定位效能sql和生成報告指令碼SQL
- 通過shell指令碼分析足彩指令碼
- 常用的主機監控shell指令碼指令碼
- crontab執行shell指令碼指令碼
- 通過 Redis 定時執行指令碼Redis指令碼
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- shell指令碼:監控MySQL服務是否正常指令碼MySql
- 監控磁碟使用率的shell指令碼指令碼
- Shell指令碼監控MySQL主從狀態指令碼MySql
- 利用shell指令碼監控網站狀態指令碼網站
- 我常用的主機監控Shell指令碼指令碼
- AIX系統資源監控SHELL指令碼AI指令碼
- 監控系統使用情況shell指令碼指令碼
- 通過shell定製ash指令碼指令碼
- 案例五:shell指令碼實現定時監控http服務的執行狀態指令碼HTTP
- 執行Shell指令碼的方式指令碼
- [ Shell ] 通過 Shell 指令碼匯出 CDL 網表指令碼
- 通過shell指令碼抓取awr報告中的問題sql指令碼SQL
- 編碼:執行緒執行監控執行緒
- Oracle慢SQL監控指令碼實現OracleSQL指令碼
- 資料庫效能SQL監控指令碼資料庫SQL指令碼
- oracle 11g監控SQL指令碼OracleSQL指令碼
- 每5秒監控5000埠的shell指令碼指令碼