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

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

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

V$PROCESS

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

1
2
3
4
5
6
SELECT
    *
FROM
    V$PROCESS
WHERE
    SPID IN (15254)

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

V$SESSION

1
2
3
4
5
6
7
8
9
10
11
12
13
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が設定されるようだ。

接続元情報を得る

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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