Oracle SQL経過時間の確認とnagios監視
1.現在のSQL経過時間を確認するSQL
SELECT AUDSID, nvl(round((sysdate - SQL_EXEC_START) * 24 * 60 * 60,0),0) as ACTIVE_TIME ,sql_id ,username FROM v$session WHERE username in ('ORAUSER','ORAUSER2') AND --チェックするユーザを入れる status='ACTIVE' -- ACTIVEのセッションのみ ORDER BY ACTIVE_TIME DESC; AUDSID ACTIVE_TIME SQL_ID USERNAME ---------- ----------- ------------- ------------------------------ 9923117 15 2qrzv6s3j88rj ORAUSER
カラム | 値 | 説明 |
---|---|---|
AUDSID | 9923117 | 監査セッションID |
ACTIVE_TIME | 15秒 | SQLの経過時間 |
SQL_ID | 2qrzv6s3j88rj | SQL_ID |
USERNAME | ORAUSER | ユーザ名 |
2.SQL_IDから実行されているSQL確認
SELECT sql_text FROM v$sqltext WHERE SQL_ID = '2qrzv6s3j88rj' ORDER BY piece; SQL_TEXT ---------------------------------------------------------------- select count(*) from log_table
1と2を合わせて作成したnagiosプラグイン
こんな感じで監視可能
- nagios OKの場合
$./check_oracle_long_query.pl -h 192.168.1.1 -u system -p systempassword -D orcl -c ORAUSER-w 30 -l 180 OK $ echo $? 0
- nagios WARNINGの場合
$./check_oracle_long_query.pl -h 192.168.1.1 -u system -p systempassword -D orcl -c ORAUSER-w 30 -l 180 WARNING: TIME= 164 SQL_ID=dm9b2ftx3qfsv SQL= BEGIN DBMS_LOCK.SLEEP(300); END; $ echo $? 1
- nagios CRITICALの場合
$./check_oracle_long_query.pl -h 192.168.1.1 -u system -p systempassword -D orcl -c ORAUSER-w 30 -l 180 CRITICAL: TIME= 272 SQL_ID=dm9b2ftx3qfsv SQL= BEGIN DBMS_LOCK.SLEEP(300); END; $ echo $? 2
追記2016/2/3
nvl(round((sysdate - SQL_EXEC_START) * 24 * 60 * 60,0),0) as ACTIVE_TIME
こうしなくても
v$session
のLAST_CALL_ET
から取得できた模様。
セッションSTATUSが現在ACTIVEである場合は、セッションがアクティブになってからの経過時間(秒)を表す。 セッションSTATUSが現在INACTIVEである場合は、セッションが非アクティブになってからの経過時間(秒)を表す。