1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RDS for OracleでCPUを使っているプロセスを特定してkillする方法

Posted at

はじめに

データベースではクライアントから投げられたクエリがぶん回ってリソースを消費してしまう、という事がたまにあります。このような時、通常はOSへログインしてtop等からCPUリソースを消費しているプロセスを特定し、そのプロセスをkillするような対応を取ります。

RDSではOSへのログインができないため、そのような場合にどのプロセスがCPUリソースを消費しているか、特定がし辛いというものが以前はありました。
しかしながら、現在では 拡張モニタリング を利用することでOSのリソース使用状況を確認することができます。

今回は RDS for Oracle を利用して、クライアントからのクエリがぶん回っているときに該当のセッションを切断する一連の流れを示します。

拡張モニタリング

拡張モニタリングはRDSのOSリソースを確認できるツールになります。
拡張モニタリングはRDSの設定で「拡張モニタリングの有効化」を行うことで利用することができます。

01-enhanced-monitor-ON.PNG

OSリソースなどの他、プロセスリストも表示することができ、プロセスリストではCPU利用率などでソートすることが可能です。
どのようなメトリクスが監視可能かは、拡張モニタリングの OS メトリクス に記載されています。DBエンジンによって一部違いがあったりしますので、確認ください。

拡張モニタリングでのプロセス確認

RDS for Oracleの[Monitoring] (モニタリング) セクションを表示すると、右側にメトリクスのカテゴリを表示するボタンがありますので、そちらから「OSプロセスリスト」を選択します。

02-enhanced-monitor-00.PNG

OSプロセスリストは以下のように表示されます。特にCPUは利用されていないことがわかります。

02-process-list-01.PNG

この状態の時に、裏からSQLをぶん回して負荷をかけると、以下のような状態になりました。
oracleTESTDB01[7774] というプロセスがCPUを25%(4VCPUなので1CPU占有)していることが確認できます。

image.png

該当のプロセスの状態を確認すると、以下のような状況でした。
(v$process の SPID が 7774 であるセッションを確認)

セッション情報確認
SQL> select sid, s.serial#, pid, spid, s.username, osuser, s.program
2  from v$process p, v$session s
3  where p.addr=s.paddr
4  and p.spid=7774;

       SID    SERIAL#        PID SPID                     USERNAME   OSUSER     PROGRAM
---------- ---------- ---------- ------------------------ ---------- ---------- --------------------------------------------------
       635       6403         45 7774                     ADMIN      ec2-user   sqlplus@ip-xxx-xxx-xxx-xxx.ap-northeast-1.compute.i

該当のプロセス(のセッション)を、SIDとSERIAL#を指定して強制切断します。

kill session
SQL> exec rdsadmin.rdsadmin_util.kill(635,6403);

PL/SQL procedure successfully completed.

SQL> /

no rows selected

ふたたびOSプロセスリストをみると、CPUを利用していたプロセスはいなくなっていることが確認できます。

02-process-list-03.PNG

まとめ

RDSではOSにログインできませんが、今回紹介した拡張モニタリングをはじめ色々なメトリクスが用意されているので、何か起きているときの現象を把握することは比較的DB on IaaSと比べても難しくはないと考えています。DBのメトリクスだけだと辛いときは、拡張モニタリングも確認してみましょう!

ちなみに切断された側のセッションは以下のようになってました。

切断されたセッション
ERROR:
ORA-01012: not logged on
Process ID: 7774
Session ID: 635 Serial number: 6403


begin
*
ERROR at line 1:
ORA-00028: your session has been killed

実はこんなことしなくても、Performance Insightsを利用するともう少し簡単に特定が可能ですので、次回はそちらを紹介します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?