突然oracleプロセスのCPU利用率が100%になってデータベースが固まる事象について
ある時、突然、サーバ上のoracleプロセスのCPU利用率が100%になって、問い合わせはおろかログインもできなくなる…そんな事象に遭遇しました。
前提:うちの環境は8コア(後述) 専用サーバモードで動作/利用していると思ふ
SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.3.0 - 64bit Production PL/SQL Release 10.2.0.3.0 - Production CORE 10.2.0.3.0 Production TNS for Linux: Version 10.2.0.3.0 - Production NLSRTL Version 10.2.0.3.0 - Production
ある時、突然データベースサーバがうんともすんともいわなくなりました。正確には、SQL問い合わせを投げると帰ってこない。ログインもできない。
で、調べてみると、pingやsshなどは普通に通ります。topコマンドその他を確認してみると、CPU利用率のうち「あるCPU(コア)のみがusertime 100%になっている」ことが解りました。wait%はほぼゼロ。その他のコアの利用率は数%程度、といたって平穏です。
なのに、他のコアに割り当てられているはずのoracleプロセス群の問い合わせもすべて通らない。IO待ちではないことも明らか。どうやらoracleの中で「固まって」いるようです。
結局、待機系にfail-overしてこの時は事なきを得た(ことなきってことはないか)。で、結果としては以下のようなものでした。
結論:「Oracle10gのバグ ただしPSRは公開済み」
要するに
- PSR10.2.0.4あてればよろしい
もう少しまとめると
- PSR10.2.0.4 では修正されている。それ以前(うちの10.2.0.3とか)では発生する
- STATSPACKを利用/仕掛けていて、statspack snapをレベル6以上で取得しているとだめ。
- レベル5に設定していれば出ないらしい
- "実行計画の取得"がレベル6以上では実施されてしまう。で、バグの発生条件に触れる。
- 固まる理由は "library cache latch"の保持しっぱなし
- 保持しっぱなしの理由はOracle内での利用メモリの枯渇・・らしい
- 利用メモリの枯渇の理由は、どうやら「メモリリーク」らしいが細かい説明割愛
同種の問題に遭遇しているかもしれないあなたへ、
- trcファイルとかで MMONの情報で
memory info: free memory = 0.00M
とか
swap info: free = 0.00M alloc = 0.00M total = 0.00M
とか出ている場合はあやしいです
なんかいまいち情報がオープンにされていないのですが、 PSR10.2.0.4を適用していなくて、STATSPACK利用している人は遭遇する可能性がありますので、エントリとしてまとめておきました。