11 Oracle Transactional Event QueuesおよびAdvanced Queuingの監視
Transactional Event Queues (TEQ)は、特にOracle Databaseで作成されたトランザクション・アプリケーションのイベントを高スループットでメッセージングおよびストリーミングするために作成されています。TEQのパフォーマンス監視フレームワークでは、データベースのGV$ビューを使用します。また、キューの主要メトリックに関するレポートの出力は各種ユーザー・インタフェースと統合できます。
この章では、一般的なオープン・ソース・ツールPrometheusおよびGrafanaを使用してメトリックを公開する方法を示します。これらのステップは、その他のUIにメトリックをエクスポートする場合にも使用できます。
この章の内容は次のとおりです。
パフォーマンス監視の重要性
次に、高スループット・メッセージング・システムのリアルタイム監視フレームワークによって得られる利点の一部を示します。
-
メッセージング・システムの正常性を一目で認識して、メッセージング・ワークロードの程度にあわせてリソースを増減できます。
-
全体的な主要パフォーマンス指標の監視: エンキュー率、デキュー率、キューの深さなど。
-
メッセージング・アクティビティに由来するCPUの負荷、メモリーの使用状況、およびデータベース待機クラスを監視することで、データベースの負荷またはシステムの負荷によるメッセージングのボトルネックを見つけます。
-
各キューの正常性状態を確認して、パフォーマンスの低いキューを素早く特定します。
-
メッセージングのメトリックに場所を問わずにアクセスすることで、開発者はアプリケーションからオーバーヘッドを監視して、メッセージ関連の問題をデバッグできます。
-
Grafanaで機能に問題が発生したときに警告を出すように設定することで迅速に対応します。
データ・フローとUIフレームワーク設定の監視
TEQモニタ・システムは、3つの個別のオープンソース・コンポーネントで構成されています。dockerコンテナは、監視フレームワークがインストールされているマシンのすべての環境、サービス、および依存関係の管理を円滑にするために使用します。
-
Oracle DBエクスポータ: Oracle Database用のPrometheusエクスポータ。データベースに接続し、メトリックを問い合せて、メトリックをPrometheus様式のメトリックに書式化します。
-
Prometheus: 監視システムおよび時系列データベース。Oracle DBエクスポータから収集したメトリックを時系列形式で管理します。
-
Grafana: 分析およびインタラクティブな視覚化プラットフォーム。データ・ソースとしてPrometheusを指定します。
TEQ Monitorシステムは、Prometheus Oracle DBエクスポータ、Prometheus、およびGrafanaを含む3つのサービスで構成されています。このシステムは、Dockerで実行するように設計されています。これにより、ユーザーはシステムを軽量でポータブルな自己完結コンテナとして使用できるようになり、事実上あらゆる場所で実行できるようになります。エクスポータは、Oracle DBへのコネクタであり、問合せ結果をPrometheus様式のメトリックに書式化します。Prometheusは、時系列データベースであり、定期的にメトリックを問い合せて収集/保存するようにエクスポータを制御します。Grafanaは、データ・ソースとしてPrometheusを使用して、メトリックを表示し視覚化します。Grafanaは、チャート作成と計算が組み込まれたユーザー・インタフェースです。すべてのサービスは、Docker-composeによって構成、管理および処理されます。
Grafansを使用してTEQダッシュボードを監視するには、次のステップを実行します。
-
管理ユーザー名とパスワードを使用して、Grafanaダッシュボードにログインします。「Welcome」ページが表示されます。
図11-2 「Welcome」ページ
-
「Welcome」ページの「TEQ Monitor」をクリックします。Grafanaが設定されると、4つの選択範囲内に表示されます。最上位の選択範囲は、インスタンス、キュー、サブスクライバおよびディスク・グループが対象です。
-
すべてのTEQ全体のサマリー
-
データベース・メトリックのサマリー
-
システム・メトリックのサマリー
-
TEQごとのサブスクライバのサマリー
-
-
それぞれをクリックしてサマリーを表示します。
次のそれぞれの図は、TEQサマリー、DBサマリー、データベース待機クラス待機時間、およびシステム・サマリーのダッシュボードを示しています。
TEQサマリー・ダッシュボードには、全体的に集計されたTEQの統計情報(ステータス、キューの数、サブスクライバの数、エンキュー率/デキュー率、メッセージの数など)が示されます

データベース・サマリー・ダッシュボードには、全体的なDBのパフォーマンスと統計情報が示されます。
画面のタイルは、次のとおりです。
-
Oracle DB Status – 「Up」または「Down」
-
Active User Sessions – アクティブなユーザー・セッションの数
-
Active Background sessions – アクティブなバックグラウンド・セッションの数
-
Inactive user sessions – 非アクティブなユーザー・セッションの数
-
Number of processes – データベース・プロセスの数
-
ASM Disk Usage – ディスク・ボリュームごとのディスク空き領域の割合
-
DB Activity – 実行数、合計解析数、ユーザー・コミット数、ユーザー・ロールバック数についてのSQLアクティビティ。
データベース待機クラスの待機時間は、「DB Wait Class Latency」ダッシュボードに示されます。待機クラス待機時間は、データベースの待機クラス・イベントの待機時間(ミリ秒単位)です。これは、より詳細なAWRレポート分析によるオーバーヘッド分析の指針として使用できます。
「System Summary」ダッシュボードには、システム・レベルのメトリックとキュー・レベルのメトリックが示されます。CPU使用率と使用メモリーから、Oracle DBを実行しているシステムの全体的なパフォーマンスと状態が反映されます。
システム・レベルの統計
-
Number of CPUs – システムに搭載されたCPUの合計数
-
OS CPU Load - すべてのシステム・プロセスとユーザー・プロセスが現在使用しているCPU処理能力の割合
-
CPU Usage: CPUビジーの割合(すべてのプロセス)と、ユーザー・プロセスのCPUビジーの割合
-
Total Physical Memory: システム(RACの場合は1つのインスタンス)に搭載された合計メモリー
-
Total Free Physical Memory: インスタンスの合計空きメモリー量
-
System Physical Memory free: 空き物理メモリーの割合
TEQキュー・レベルの統計
1つの特定のキューの統計情報(率、合計メッセージ数、キューの深さ、処理の推定時間、前回のデキューからの経過時間)が表示されます。このキューは、ユーザーがドロップダウン・メニューから選択できます。
-
Enqueue/Dequeue Messages: エンキューされたメッセージ数、デキューされたメッセージ数
-
Enqueue/Dequeue rate: 1秒当たりにエンキューおよびデキューされたメッセージの数
-
TEQ Depth – キューに残っているメッセージ数
-
TEQ Name - キューの名前
-
Subscriber Name – サブスクライバの名前
-
Time to drain if no enq – 新規エンキューがないときにキューの排出にかかる推定時間
-
Time since last dequeue – キューに対する前回のデキューからの経過時間
測定対象の主要メトリック
ここでは、前述のメトリックの補足的な詳細と、そうしたメトリックをGrafana画面から読み取る方法について説明します。ドロップダウン・メニューのオプションは、データベース・インスタンス、キュー、およびサブスクライバのレベルで使用できます。AQ/TEQサマリーのメトリックとデータベースのメトリックは、ユーザーがドロップダウン・メニューから選択したデータベース・インスタンスに関するものです。
-
AQ/TEQサマリーのメトリック
-
TEQ Status: TEQが実行中かどうか
-
Total Number of TEQs: 実行中のTEQの数
-
Total TEQ Subscribers: すべてのTEQに対するサブスクライバの合計数
-
Overall Enq/Deq Rates: すべてのTEQに対する合計エンキュー率/デキュー率
-
Overall Enqueued Messages: キュー・システム全体でエンキューされたメッセージの合計数
-
Overall Dequeued Messages: キュー・システム全体でデキューされたメッセージの合計数
-
-
データベース・サマリーのメトリック
-
Oracle DB Status: Oracle DBが実行中かどうか
-
Active User Sessions: アクティブなユーザー・セッションの数
-
Active Background Sessions: アクティブなバックグラウンド・セッションの数
-
Inactive User Sessions: 非アクティブなユーザー・セッションの数
-
Number of Processes: 実行中のOracleプロセスの数
-
ASM Disk Usage: Oracle Automatic Storage Managementディスク・グループのメモリー使用状況(+DATAや+RECOなど)
-
DB Activity: 発生したDBアクティビティの数(実行数、ユーザー・コミット数、解析合計数、ユーザー・ロールバック数など)。
-
DB Wait Class Latency: DB待機クラス(管理、アプリケーション、コミット、同時処理、構成、アイドル、ネットワーク、その他、システムI/O、ユーザーI/O)の平均待機時間(ミリ秒単位)
-
-
システム・サマリーのメトリック
-
Number of CPUs: Oracle DBを実行しているシステムのCPUの数
-
OS CPU Load: 現在動作中または準備完了状態で、オペレーティング・システムのスケジューラによる実行を待機しているプロセスの数。この統計値を見ると、通常、プラットフォームの平均ロードが分単位でわかる
-
CPU Usage (Busy + User): リアルタイムのCPU使用率(ビジー状態のCPUまたはユーザー・コードを実行しているCPU)
-
Total Physical Memory: システムの合計物理メモリー。
-
Total Free Physical Memory: システムの合計空き物理メモリー。
-
System Free Physical Memory: システムの空きメモリーの割合。
-
-
キュー・レベルのメトリック
-
Enq/Deq Messages: TEQに対してエンキュー/デキューされたメッセージの合計数
-
Enq/Deq Rate: TEQのエンキュー率/デキュー率
-
TEQ Depth: キューに残っているメッセージの合計数
-
TEQ Name: TEQの名前
-
Subscriber Name: TEQサブスクライバの名前
-
Time to Drain if No Enq: エンキューがない場合にすべてのメッセージの処理にかかる合計時間
-
Time since Last Deq: 現在の時刻と前回のデキュー操作の時刻の時差
-
監視の設定用スクリプト
次に、監視フレームワークの設定時に実行するステップを示します。
-
パッケージのコピー/クローン作成: 次のファイル/ディレクトリで構成されているパッケージ全体を取得します。
-
Makefile
-
docker-compose.yml
-
.env
-
README.md
-
データベース・メトリックのエクスポータ
-
Prometheus
-
Grafana
-
-
Dockerのインストール: dockerは環境/サービス/依存関係の管理に使用します(https://docs.docker.com/install/)
-
Oracle DB接続文字列の指定:
.env
ファイルで接続文字列を指定します。ノート:
監視ユーザーに十分な権限(select system views)を付与します。
-
監視の開始: モニター・パッケージのルート・フォルダで、ターミナルに「
make run
」と入力します。その操作の前に、Oracle DBとTEQが実行中になっていることを確認してください。監視後、http://localhost:3000
に移動します -
モニタの停止/削除: ターミナルに「
make stop
」と入力します -
その他の使用方法:
-
make logs
: すべてのサービスのログを表示します -
make pause
: 問合せ/サンプリング/モニターを一時停止します -
make unpause
: すべてのサービスを再開します
-
これらのステップを完了すると、基本的なサービスが設定されます。構成とカスタマイズは多くの側面から利用できます(サービス・ポート、モニター間隔、追加のメトリック、ダッシュボードの変更については、後述の説明を参照してください)
TEQ Monitorの構成/カスタマイズ
-
構成
-
サービス・ポートの変更:
docker-compose.yml
で独自のローカル・ポートを指定しますエクスポータのポートを変更する場合は、該当するターゲットの/prometheus
にあるconfig.yml
も変更してください。 -
モニター間隔の変更:
/prometheus
にあるconfig.yml
で、Prometheus/Exporterの収集間隔/タイムアウト/評価を変更して監視のサンプリング・パラメータを調整します。
-
-
カスタマイズ
-
メトリックの追加: エクスポータ・フォルダにあるdefault-metrics.tomlで独自のメトリックをカスタマイズします。詳細なガイダンスと情報は、githubの
iamseth/oracledb_exporter
を参照してください。 -
ダッシュボードのカスタマイズ: Prometheusからパネルを追加してメトリックを問い合せます。詳細なガイダンスと情報は、Grafanaのマニュアルを参照してください。
-
Kafka JavaクライアントおよびKafkaのTEQとの互換性の測定
このTEQの測定に使用されるフレームワークは、TEQにKafka Javaクライアントを使用しているときや、JMS sourceおよびsinkコネクタを使用してKafkaとTEQを相互運用しているときにも使用できます。キュー・レベルのメトリック、データベース・レベルのメトリック、およびシステム・レベルのメトリックはすべて同じです。
詳細は、「Transactional Event QueueとApache Kafkaの相互運用性」を参照してください。
トラブルシューティング
詳細なガイダンスと情報は、docker-composeのドキュメント( https://docs.docker.com/compose/reference/logs/)を参照してください。