Oracleに負荷をかけているプログラムを探す

Oracleに負荷をかけているプログラムを探す

OracleサーバのCPUの1つのコアが100%利用されている。
LinuxのtopコマンドでoracleORCL(LOCAL=NO)が利用しているのはわかったが、どこからのアクセスでそうなっているのかわからない。
LinuxのプロセスIDからアクセス元を特定できないものか。

V$PROCESS

V$PROCESS.SPIDがプロセスIDのようだ。


SELECT
*
FROM
V$PROCESS
WHERE
SPID in (15254)

SPIDに指定しているのはtopでCPUを100%使用していたプロセスのプロセスID。
しかし、V$PROCESSだけでは、プログラム名や接続元が取得できない。
V$SESSIONを結合する。

V$SESSION


SELECT
S.PROGRAM,
S.USERNAME, -- ORACLE接続ユーザ
S.OSUSER, -- OSユーザ
S.MACHINE, -- 接続元ホスト名
S.PROCESS, -- 接続元ホストでのプロセスID(取得できれば)
S.EVENT
FROM
V$PROCESS P
JOIN V$SESSION S
ON P.ADDR = S.PADDR
WHERE
P.SPID = 19391;

これで、接続元の情報が取得できた。
なお、動的ディクショナリビュー同士の結合は推奨されないようだ。

MACHINE列に表示されたサーバに接続し、そのサーバでプロセスプロセスIDを検索する。これで犯人がわかった。
ちなみに、プロセスIDの取得ができない場合は1234が設定されるようだ。

接続元情報を得る

この際、負荷の高いプロセスの接続元だけではなく、すべて表示してみる。


SELECT
S.PROGRAM,
S.USERNAME,
S.OSUSER,
S.MACHINE,
S.PROCESS,
S.EVENT,
P.PROGRAM,
P.SPID
FROM
V$PROCESS P
JOIN V$SESSION S
ON P.ADDR = S.PADDR
ORDER BY
S.PROGRAM,
S.MACHINE,
S.PROCESS;

意外と接続されていることが分かった。

まとめ

運用始めてから5年以上経つOracleが、思いもよらないサーバからアクセスされていることに気が付いてしまった。今回の高負荷の原因とは関係ないアクセスだったが、一応ブロックしておこうか。

同じタグの記事
同じカテゴリの記事

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA