18
Copyright © 2015 NTT DATA INTELLILINK Corporation JPOUG> SET EVENTS 20151017 意外と簡単じゃなかった OEM12cによる統合DB環境のCPU監視 NTTデータ先端技術株式会社 オラクル事業部 松尾

意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

  • Upload
    matsuor

  • View
    1.370

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

Copyright © 2015 NTT DATA INTELLILINK Corporation

JPOUG> SET EVENTS 20151017 意外と簡単じゃなかった OEM12cによる統合DB環境のCPU監視

NTTデータ先端技術株式会社 オラクル事業部 松尾 亮

Page 2: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

2 Copyright © 2015 NTT DATA INTELLILINK Corporation

やりたいこと

統合DBサーバ

OLTP DWH

OEMサーバ

OEM リポジトリ

OMS (Oracle Management Service)

OMA (Oracle Management Agent)

Upload

監視 蓄積

DB毎のCPU使用率 OS全体のCPU使用率

こんなふうに監視したい

OLTP DWH

Page 3: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

3 Copyright © 2015 NTT DATA INTELLILINK Corporation

OEMの監視メトリックを確認

データベースインスタンスのメトリック

→ 効率 → CPU使用率/秒 or データベースCPU時間(%) が使えるか?

Page 4: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

4 Copyright © 2015 NTT DATA INTELLILINK Corporation

マニュアルを確認

Page 5: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

5 Copyright © 2015 NTT DATA INTELLILINK Corporation

マニュアルを確認

正しい値というものはないらしい…

→ これでは監視に使えない

Page 6: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

6 Copyright © 2015 NTT DATA INTELLILINK Corporation

他のメトリックを探してみた

データベースインスタンスのメトリック

→ 待機時間のボトルネック

→ 平均インスタンスCPU時間(%) が使えるか?

ここに鉛筆マークがない → 編集できない → 監視閾値が設定できない!

※閾値設定可能なメトリックだけ設計書に書いていたため、画面を見るまで発見できませんでした。。。

Page 7: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

7 Copyright © 2015 NTT DATA INTELLILINK Corporation

マニュアルを確認

のってなーい

Page 8: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

8 Copyright © 2015 NTT DATA INTELLILINK Corporation

分かんないので検証(収集間隔を10分→1分に変えてみる)

ここを変更

より短い間隔での状況を把握したいため、10分→1分に変更し、負荷検証実施。

閾値設定できないため監視に使えないが、まずは挙動を確認するためにやってみる。

収集間隔の変更前は期待した値が取得できてそうに見えたけど…

実際に掛けた負荷↓ OEMリポジトリDBに格納された値↓

えー?

Page 9: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

9 Copyright © 2015 NTT DATA INTELLILINK Corporation

統合DBサーバ

OLTP DWH

OEMサーバ

OEM リポジトリ

OMS (Oracle Management Service)

OMA (Oracle Management Agent)

Upload

監視 蓄積

SQLを覗いてみる(調査手順)

①共有プールをFlush SQL> alter system flush shared_pool;

②メトリック収集を手動実行 $ emcli login -username=sysman -password=welcome1 $ emcli collect_metric -target_type="oracle_database" ¥ -target_name="oltp" ¥ -metric_name="wait_bottlenecks"

③v$sqlから探す SQL> set long 10000000 SQL> select SQL_FULLTEXT from v$sql where PARSING_SCHEMA_NAME = 'DBSNMP';

Page 10: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

10 Copyright © 2015 NTT DATA INTELLILINK Corporation

SQLを覗いてみる(発見!)

SELECT : FROM : ( SELECT SUM(intsize_csec) as intsize_csec, MAX(end_time) as end_time, : AVG( CASE WHEN metric_name = 'CPU Usage Per Sec' THEN value / 100 ELSE null END ) cpu_time_ps, : FROM v$sysmetric_history WHERE metric_name IN(…'Database Time Per Sec', 'CPU Usage Per Sec', 'Host CPU Utilization (%)') AND group_id = 2 AND end_time > SYSDATE - 10 / (60 * 24) AND end_time <= SYSDATE :

主なポイント ・v$sysmetric_history から ・直近10分の ・平均値を 持ってきている

ここが収集間隔に合わせて動的に 変更されればいいのに…

Page 11: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

11 Copyright © 2015 NTT DATA INTELLILINK Corporation

期待通り格納されなかったワケ

16:24 0.0

16:25 0.0

16:26 0.0

16:27 0.0

16:28 0.0

16:29 0.0

16:30 0.0

16:31 0.0

16:32 20.0

16:33 0.0

16:34 40.0

16:35 0.0

16:36 60.0

16:37 0.0

16:38 80.0

16:39 0.0

16:40 100.0

16:24 0.0

16:25 0.0

16:26 0.0

16:27 0.0

16:28 0.0

16:29 0.0

16:30 0.0

16:31 0.0

16:32 1.7

16:33 1.7

16:34 5.0

16:35 5.0

16:36 10.0

16:37 10.0

16:38 16.7

16:39 16.7

16:40 25.0

収集間隔を変更しても 10分間の平均値を

リポジトリに格納していた

v$sysmetric_history

(ターゲットDB)

mgmt$metric_details

(OEMリポジトリDB)

Page 12: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

12 Copyright © 2015 NTT DATA INTELLILINK Corporation

SQLが分かったのでメトリック拡張に仕込んで解決

監視→メトリック拡張 →アクション→作成→メトリック拡張 SQLを埋め込んで、取得してきた値を監視する仕組みが構築できる。 取得した値は、OEMリポジトリDBに格納されるためレポーティングも可能。

Page 13: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

13 Copyright © 2015 NTT DATA INTELLILINK Corporation

メトリック拡張に実装する場合の注意事項

① v$sysmetric_historyの単位はCPU_TIMEである

1秒あたりのCPU_TIME 1秒 ≒ 1秒間に1コア占有と考える。

つまり、32コア搭載のDBサーバの場合、

CPU_TIME 32秒/秒 ≒ CPU使用率100%/秒

CPU_TIME 16秒/秒 ≒ CPU使用率50%/秒

と考える。

ちなみに、OEMリポジトリに格納されていた値は初期化パラメータcpu_count値を

ベースにCPU使用率に変換されていた。

v$sysmetric_history → mgmt$metric_details

16秒/秒(cpu_count=32の場合) → 50%/秒

16秒/秒(cpu_count=16の場合) → 100%/秒

※前ページまでの検証時の値は分かりやすくするため、全てCPU使用率表示に加工しています。

Page 14: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

14 Copyright © 2015 NTT DATA INTELLILINK Corporation

メトリック拡張に実装する場合の注意事項

② バックグラウンドプロセスのCPU_TIMEも追加する

WHERE metric_name IN

(‘Database Wait Time Ratio’, #削除

'Database Time Per Sec', #削除

‘CPU Usage Per Sec’, #残す(これはフォアグラウンドのCPU_TIME)

'Host CPU Utilization (%)‘, #削除

‘Background CPU Usage Per Sec’ #追加

)

③ 直近1件のみ取得するよう変更する

end_time > SYSDATE – 10 1 / (60 * 24) # 10→1に変更

④ 他、諸々SQLのカスタマイズは必要

不要な条件式、計算式、カラム等の削除など

CPU_TIME → CPU使用率への変換

※どの値で表示したいか(cpu_countベース?OSのCPUベース?CPU_TIMEのまま?)を検討

※加工に拘らず v$sysmetric_history を使ってイチから作るという意識の方がたぶん簡単です(笑)

Page 15: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

15 Copyright © 2015 NTT DATA INTELLILINK Corporation

おわりに

マニュアルに書いてなくても…

サポートに非公開と言われても…

なんとかできることは多々ある!

疑問をもって検証してみましょう!!

と言いつつ、今回の検証は自分でやってません(笑)

Page 16: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

16 Copyright © 2015 NTT DATA INTELLILINK Corporation

Special Thanks!検証してくれたお二人

Page 17: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

17 Copyright © 2015 NTT DATA INTELLILINK Corporation

End!

ORA-03113:

通信チャネルでend-of-fileが検出されました

続きは夜会で...

Page 18: 意外と簡単じゃなかったOracle Enterprise Manager 12cによる統合DB環境のCPU監視@2015-10-17 JPOUG

Copyright © 2011 NTT DATA Corporation

Copyright © 2015 NTT DATA INTELLILINK Corporation