Oracle Database 12c Release 1(12.1.0.1)の新パフォーマンスチューニング機能:パート1
TriCoreによる初出:2017年4月11日
本記事は2部構成のブログシリーズで、Oracle® Database 12.1.0.1および12.1.0.2に搭載された新しいパフォーマンスチューニング機能について解説します。パート1では、前者のバージョンである12.1.0.1を取り上げます。
Oracle Database 12.1.0.1の主な新機能
Oracle Database 12.1.0.1では、以下の機能が新たに提供されました。
- リアルタイムAutomatic Database Diagnostic Monitor(リアルタイムADDM)
- Program Global Area(PGA)サイズ制限のサポート
- Active Session History(ASH)の拡張
リアルタイムADDMとは
リアルタイムADDMを活用すれば、データベースを再起動することなく、ハング状態に陥ったデータベースの問題を分析し、解決へ導くことができます。ここでは、リアルタイムADDMの詳細を説明します。
リアルタイムADDMの接続モード
リアルタイムADDMは、Oracle Enterprise Manager(OEM)経由でデータベースに接続する際、データベースの状態に応じて次の2つの接続モードのいずれかを使用します。
通常接続:Java Database Connectivity(JDBC)を使用してデータベースに接続します。接続が確立できる状況では、このモードにより広範なパフォーマンス分析が実行されます。
診断接続:ラッチを使用しない接続(ラッチレス接続)を行います。通常のJDBC接続が不可能な深刻なハング状態の発生時に有効です。
リアルタイムADDMのトリガーの仕組み
リアルタイムADDMは3秒ごとに自動的に実行され、インメモリデータを利用してデータベースのパフォーマンス問題を診断します。問題を検出すると、自動的に分析が起動されます。この仕組みは以下のステップで構成されています。
3秒ごとに、管理性モニター(MMON)プロセスが、ロックやラッチを使用せずにパフォーマンス統計を取得する処理を実行します。
MMONプロセスは取得した統計を確認し、表1に示したいずれかの問題を検出すると、リアルタイムADDM分析をトリガーします。
MMONスレーブプロセスがレポートを作成し、Automatic Workload Repository(AWR)に保存します。詳細は、DBA_HIST_REPORTSビューおよびDBA_HIST_REPORTS_DETAILSビューで確認できます。
また、次のコマンドを実行することで、レポートを手動で生成することも可能です。
SQL> select dbms_addm.real_time_addm_report() from dual;
表1:リアルタイムADDM分析をトリガーするパフォーマンス問題と条件
| 問題 | 条件 |
|---|---|
| 高負荷 | アクティブセッションの平均数がCPUコア数の3倍を超えている |
| I/Oボトルネック | シングルブロック読み取り性能に基づき、I/Oがアクティブセッションへ与える影響が大きい |
| CPUボトルネック | アクティブセッションが総負荷の10%超であり、かつCPU使用率が50%超である |
| メモリの過剰割り当て | メモリ割り当てが物理メモリの95%を超えている |
| インターコネクトボトルネック | シングルブロックのインターコネクト転送時間に基づいて判定される |
| セッション上限 | セッション上限の使用率が100%近くに達している |
| プロセス上限 | プロセス上限の使用率が100%近くに達している |
| ハングセッション | ハングセッションが全セッションの10%を超えている |
| デッドロック検出 | デッドロックが1件でも検出された場合 |
出典:Database Performance Tuning Guide 第7章「自動パフォーマンス診断」:リアルタイムADDM接続モード
リアルタイムADDMのトリガー制御
自動トリガーが必要以上にシステムリソースを消費しないよう、リアルタイムADDMには以下の制御機構が備わっています。
レポート作成間隔:過去5分以内に自動トリガーによってリアルタイムADDMレポートが作成されている場合、新たなレポートは生成されません。
Oracle Real Application Clusters(RAC)の制御:自動トリガーは各データベースインスタンス単位で動作します。Oracle RAC環境では、同時に1つのインスタンスのみがリアルタイムADDMレポートを作成できます。
繰り返しトリガー:同一問題に対する自動トリガーは、過去45分以内に同じ原因で作成された前回のレポートと比べ、影響度が100%以上である必要があります。
新規検出問題:過去45分以内に検出されていない新しい問題が見つかった場合は、新たにレポートが生成されます。
PGAサイズの制限
PGAの過剰な使用は、スワッピングの急増につながり、システムが応答しなくなったり不安定になったりする恐れがあります。こうした事態を回避するには、PGA_AGGREGATE_LIMIT初期化パラメータを使用してPGA全体の使用量に上限を設けることを検討しましょう。
以下では、Oracle Database 12c R1(12.1.0.1)以降でPGA_AGGREGATE_LIMIT初期化パラメータを使ってPGAサイズを制限する方法を解説します。
PGA_AGGREGATE_LIMITパラメータについて
PGA_AGGREGATE_LIMITで定義した値を超えると、Oracle Databaseは、チューニング不可のPGAメモリを最も多く消費しているセッションまたはプロセスを中断・終了させます。終了処理は以下の順序で実行されます。
- チューニング不可のPGAメモリを最も多く消費しているセッションへのコールをアボートします。
- それでもPGAメモリ使用量がPGA_AGGREGATE_LIMITを超えている場合は、最も多く消費しているセッションおよびプロセスを終了させます。
並列クエリは1つの単位として扱われます。デフォルトでは、PGA_AGGREGATE_LIMITパラメータは「2GB」「PGA_AGGREGATE_TARGET値の200%」「PROCESSESパラメータ値×3MB」のうち最大の値に設定されます。ただし、「物理メモリサイズからSystem Global Area(SGA)合計サイズを差し引いた値の120%」を超えることはありません。
PGA_AGGREGATE_LIMITパラメータの設定
PGA_AGGREGATE_LIMIT初期化パラメータは動的に設定でき、データベースの再起動は不要です。また、自動メモリー管理の使用有無にかかわらず、このパラメータを設定できます。
PGA_AGGREGATE_LIMITパラメータの変更
PGA_AGGREGATE_LIMIT初期化パラメータには、新しい値をバイト数で指定します。値に0を設定すると、PGAメモリのハードリミットが無効になります。
PGA_AGGREGATE_LIMITを超えた場合、Oracle Databaseは以下のアクションを実行します。
- 最も多くのチューニング不可メモリを使用しているセッションに関連付けられたコールをアボートします。
- それでもPGAメモリの合計使用量が上限を超えている場合は、最も多くのチューニング不可メモリを使用しているセッションを終了させます。
sys.processesおよびジョブキュープロセス以外のバックグラウンドプロセスは対象外です。代わりに、これらが最も多くのチューニング不可メモリを使用している場合、PGA使用状況の概要が定期的にトレースファイルへ書き込まれます。
ASHの拡張
Oracle 12c以降では、ASH Analyticsという新しいOEMページからASHデータの可視化にアクセスできるようになりました。このページでは、論理ディメンションに沿ってドリルダウン分析を行えます。さらに、レポートを他のユーザーに送信し、オフライン環境で閲覧してもらうことも可能です。

画像出典:OCP 12C – Emergency Monitoring, Real-Time ADDM
まとめ
これらの新機能を組み合わせることで、Oracle Database 12c Release 1におけるパフォーマンス問題のトラブルシューティングと改善が大幅に容易になります。シリーズのパート2では、Oracle Database 12.1.0.2におけるパフォーマンスチューニング関連のさらなる新機能と変更点を紹介します。
コメントやご質問がある場合は、フィードバックタブよりお気軽にお寄せください。
参考文献
本記事の執筆にあたり、以下の資料を参考にしました。
Database Performance Tuning Guide 第7章「自動パフォーマンス診断」:リアルタイムADDM接続モード
Database Performance Tuning Guide 第7章「自動パフォーマンス診断」:ADDM分析結果
-
データベース管理者必見!Oracle Database 19cの新機能徹底解説
Oracle® Database 19cは、数多くの新機能と改善された機能を搭載して登場しました。本記事では、データベース管理者(DBA)の業務を効率化する主要な新機能について詳しく解説します。 はじめに Oracle 19cは、Oracle Database 12cリリース2製品ファミリーにおいて長期サポートが提供される最終リリースです。Linux®、Windows®、Solaris®、HP/UX®、AIX®などの各プラットフォームに加え、Oracle Cloud上でも利用可能です。Oracle 19cは、あらゆる運用系および分析系ワークロードに対して、最高レベルのパフォーマンス、スケーラビ
-
Ruby 2.6の新機能9選|コード例でわかる注目ポイントを徹底解説
Ruby 2.6には、開発者の生産性を高める新しい機能やパフォーマンス改善が多数盛り込まれています。 本記事では、Ruby 2.6で導入された9つの注目新機能を、実際のコード例とともにわかりやすく紹介します。最新のRuby動向をキャッチアップしたい方は、ぜひ最後までご覧ください。 1. 無限Range(Endless Range) Ruby 2.5以前でもFloat::INFINITYを使えば終端のない範囲を表現できましたが、Ruby 2.6ではさらに直感的な記法が使えるようになりました。 新しい無限Rangeは次のように書きます。 (1..) 通常のRangeが(1..10)のように終端