おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

RACでCPU負荷が1ノードに偏る

夏真っ盛りのある日、2ノードRACで片ノードにCPU負荷が偏っているので、調査して欲しいとの依頼を受けました。

リリースしたばかりの本番環境で、構成は以下の通りです。

Oracle RAC(2ノード) EE 12.1.0.2

RHEL Version 7.3 

 

ps情報で確認した結果、サーバプロセス数に顕著な偏りは見られませんでした。
また、topで確認した結果、CPU負荷が高い時間帯で共有サーバプロセスがCPUを非常に多く使用しています。
この為、共有サーバプロセスのCPU高負荷がサーバのCPU高騰の原因であろうと思われます。

 

AWRレポートを取得して、CPU負荷が偏っていた時間帯について調査しました。

結論から言うと、CPU使用時間の長いSQLの実行数が高負荷ノードに偏っていたので、それが原因だと考えられます。

 

これについてはAP側に接続方式などを確認してもらう事にしましたが、どう見てもAPのSQLでないものがCPU使用時間上位にいたので、それについて調べてみました。

ノード1の「SQL ordered by CPU Time」

CPU Time (s) Executions CPU per Exec (s) %Total Elapsed Time (s) %CPU %IO SQL Id SQL Text
1,104.18 74,208 0.01 7.61 1,080.59 102.18 0.26 xxxxxxxxxx update TABLE_A set...
135.80 4,612,584 0.00 0.94 206.48 65.77 0.00 a6r5q9yqaqabs select obj#, name, stab#, sobj...
101.52 24,685 0.00 0.70 176.52 57.51 0.41 c3zymn7x3k6wy select obj#, dataobj#, part#, ...

ノード2の「SQL ordered by CPU Time」

CPU Time (s) Executions CPU per Exec (s) %Total Elapsed Time (s) %CPU %IO SQL Id SQL Text
7,945.56 1,402,823 0.01 47.81 8,208.24 96.80 0.43 xxxxxxxxxx update TABLE_A set...
73.53 15,118 0.00 0.44 132.14 55.65 0.41 c3zymn7x3k6wy select obj#, dataobj#, part#, ...
66.06 2,385,744 0.00 0.40 106.47 62.05 0.00 a6r5q9yqaqabs select obj#, name, stab#, sobj...

 

「c3zymn7x3k6wy」について、以下のドキュメントを見つけました。

Hard Parse For Large Partitioned Table Is Very Slow (ドキュメントID 2486764.1)

パーティション数の多いテーブルにアクセスするSQLでハードパース時間が非常に長くなるというもので、「c3zymn7x3k6wy」の他にも「9tgj4g8y4rwy8」と「9b4m3fr3vf9kn」の実行時間が長くなるそうです。

今のところバグではないとされているので(機能拡張リクエストはされています)、回避策も無しだそうです。

 

「a6r5q9yqaqabs」については、以下のドキュメントがヒットしました。

Library Cache Lock Wait Event Due to Recursive Sql with Sql ID 'a6r5q9yqaqabs' (ドキュメントID 2431576.1)

こちらはBug 20853821 の影響で Sql ID 'a6r5q9yqaqabs'が多数実行され、パフォーマンスに影響を及ぼすとの説明で、個別パッチが出ています。

ですがこれらがレポートされたのは調査した中のある1時間だけで、影響も少ないので特に対処は行っていません。

 APの偏りについてはAP側で調査中ですので、何かわかったら追記したいと思います。