8.7 パラレル実行のパフォーマンスの監視
パラレル実行のパフォーマンスに関する問題を診断するときは、次の種類の監視を行う必要があります。
これらの監視の種類を、次に示します。
関連項目:
動的ビューの詳細は、『Oracle Databaseリファレンス』を参照してください
8.7.1 動的パフォーマンス・ビューを使用したパラレル実行パフォーマンスの監視
動的パフォーマンス・ビューを使用してパラレル実行パフォーマンスを監視できます。
Oracle Databaseのリアルタイム監視機能を使用すると、SQL文の実行中にパフォーマンスを監視することができます。SQLの監視が自動的に開始するのは、SQL文がパラレルで実行されたとき、または1回の実行でCPUまたはI/O時間を5秒以上消費したときです。
システムが数日間稼働した後に、パラレル実行パフォーマンスの統計を監視して、並列処理が最適かどうかを判別する必要があります。これには、ここで説明するいずれかのビューを使用します。
Oracle Real Application Clustersでは、ここで説明するビューのグローバル・バージョンによって、複数インスタンスの統計が集計されます。グローバル・ビューの名前はG
で開始します。たとえば、V$FILESTAT
に対してはGV$FILESTAT
となります。
関連項目:
パフォーマンス監視の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください
8.7.1.1 V$PX_BUFFER_ADVICE
V$PX_BUFFER_ADVICE
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$PX_BUFFER_ADVICE
ビューは、すべてのパラレル問合せによる最大バッファ使用量の履歴と見積りに関する統計を示します。このビューを調べて、パラレル問合せのメモリー不足の問題に応じてSGAサイズを再構成できます。
8.7.1.2 V$PX_SESSION
V$PX_SESSION
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$PX_SESSION
ビューは、問合せサーバーのセッション、グループ、セットおよびサーバー数のデータを示します。パラレル実行のために稼働しているプロセスのリアルタイム・データも示します。この表には、リクエストされた並列度(DOP)と操作に与えられた実際のDOPの情報も含まれます。
8.7.1.3 V$PX_SESSTAT
V$PX_SESSTAT
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$PX_SESSTAT
ビューは、V$PX_SESSION
表とV$SESSTAT
表のセッション情報を結合したものです。つまり、通常のセッションで得られるすべてのセッション統計は、パラレル実行を使用して実行されるすべてのセッションでも利用できます。
8.7.1.4 V$PX_PROCESS
V$PX_PROCESS
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$PX_PROCESS
ビューには、パラレル・プロセスの情報が含まれます。ステータス、セッションID、プロセスID、その他の情報があります。
8.7.1.5 V$PX_PROCESS_SYSSTAT
V$PX_PROCESS_SYSSTAT
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$PX_PROCESS_SYSSTAT
ビューは、問合せサーバーのステータスとバッファ割当て統計を示します。
8.7.1.6 V$PQ_SESSTAT
V$PQ_SESSTAT
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$PQ_SESSTAT
ビューは、システムの現在のサーバー・グループすべてのステータスを示します。問合せによってどのようにプロセスが割り当てられたか、またマルチユーザー問合せ調整アルゴリズムやロード・バランシング・アルゴリズムにより、デフォルト値やヒント指定された値がどのように影響されたかといったデータが含まれます。
場合によっては、これらのビューのデータを確認した後で、パフォーマンスを改善するために一部のパラメータの設定を調整する必要があります。その場合は、「パラレル実行のための一般的なパラメータのチューニング」の説明を参照してください。実行時間の長いパラレル操作の進捗を監視するには、これらのビューを定期的に問い合せます。
多くの動的パフォーマンス・ビューでは、Oracle Databaseが各ビューの統計を収集するためには、パラメータTIMED_STATISTICS
をTRUE
に設定する必要があります。ALTER
SYSTEM
またはALTER
SESSION
文を使用して、TIMED_STATISTICS
の設定を切り替えることができます。
8.7.1.7 V$PQ_TQSTAT
V$PQ_TQSTAT
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
単純な例として、固有値が2種類のみの1つの列の結合による、2つの表のハッシュ結合について考えます。このハッシュ関数は、最大でも、パラレル実行サーバーAに対して1つのハッシュ値、パラレル実行サーバーBに対してもう1つのハッシュ値を生成します。DOPは2で問題ありません。4とすると少なくとも2つのパラレル実行サーバーの作業がなくなります。このような偏りを検出するには、次の例のような問合せを使用します。
SELECT dfo_number, tq_id, server_type, process, num_rows FROM V$PQ_TQSTAT ORDER BY dfo_number DESC, tq_id, server_type, process;
この問題を解決する最適な方法は、別の結合方法の選択です。ネステッド・ループ結合が最適であると予想されます。または、結合表の一方が他方よりも小さい場合は、PQ_DISTRIBUTE
ヒントを使用してBROADCAST
分散方法を指定できます。オプティマイザによってBROADCAST
分散方法が考慮されるためには、OPTIMIZER_FEATURES_ENABLE
を9.0.2以上に設定する必要があります。
ここで、カーディナリティの高い結合キーがあるが、値の1つにほとんどのデータが含まれると仮定します。このような例としては、ラーバ・ランプの年次売上があります。大きな売上があったのは1968年のみで、1968年のレコードに対応するパラレル実行サーバーの負荷が高くなります。前述したものと同じ修正処理を使用する必要があります。
V$PQ_TQSTAT
ビューは、表キュー・レベルのメッセージ・トラフィックの詳細なレポートを示します。V$PQ_TQSTAT
データが有効なのは、パラレルSQL文を実行しているセッションから問い合せた場合のみです。 表キューは、問合せサーバー・グループ間、パラレル実行コーディネータと問合せサーバー・グループ間、または問合せサーバー・グループとコーディネータ間のパイプラインです。表キューは、PX SEND <partitioning type>
(たとえば、PX SEND HASH
)およびPX
RECEIVE
によって操作列に明示的に示されます。
V$PQ_TQSTAT
には、各表キューに対して読取りまたは書込みを行う問合せサーバー・プロセスごとに1行があります。10のコンシューマ・プロセスと10のプロデューサ・プロセスを接続する表キューの場合、このビューに20の行があります。バイト列を合計し、TQ_ID
(表キュー識別子)によってグループ化すると、各表キューを介して送信された合計バイト数を求めることができます。この値をオプティマイザの見積りと比較します。差が大きいときは、より大きなサンプルを使用したデータの分析が必要な可能性があります。
TQ_ID
でグループ化したバイト数の平方偏差を計算します。平方偏差が大きい場合はワークロードの不均衡を意味します。大きな平方偏差について調べて、プロデューサの起動時にデータ分散が不均等だったのか、分散そのものに偏りがあるのかを判別する必要があります。データそのものに偏りがある場合は、カーディナリティが低い、あるいは固有値が少ないことを意味します。
8.7.1.8 V$RSRC_CONS_GROUP_HISTORY
V$RSRC_CONS_GROUP_HISTORY
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$RSRC_CONS_GROUP_HISTORY
ビューは、非NULLプランのあるV$RSRC_PLAN_HISTORY
に、パラレル文のキューイングの情報など、各エントリに対するコンシューマ・グループ統計の履歴を表示します。
8.7.1.9 V$RSRC_CONSUMER_GROUP
V$RSRC_CONSUMER_GROUP
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$RSRC_CONSUMER_GROUP
ビューは、パラレル文の情報など、現在アクティブなリソース・コンシューマ・グループに関連するデータを表示します。
8.7.1.10 V$RSRC_PLAN
V$RSRC_PLAN
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$RSRC_PLAN
ビューは、パラレル文のキューイングの状態など、現在アクティブなリソース・プランすべての名前を表示します。
8.7.1.11 V$RSRC_PLAN_HISTORY
V$RSRC_PLAN_HISTORY
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$RSRC_PLAN_HISTORY
は、リソース・プランがインスタンスで有効化、無効化または変更された場合の履歴を表示します。履歴にはパラレル文のキューイングの状態を含みます。
8.7.1.12 V$RSRC_SESSION_INFO
V$RSRC_SESSION_INFO
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$RSRC_SESSION_INFO
ビューは、パラレル文のキュー統計など、リソース・マネージャ統計をセッション単位で表示します。列には、PQ_SERVERS
およびPQ_STATUS
が含まれます。
セッションがアクティブでパラレル問合せを実行している場合、V$RSRC_SESSION_INFO
ビューのPQ_SERVERS
列には、アクティブなパラレル・サーバーの数が含まれます。問合せがキューに入れられると、この問合せで実行するパラレル・サーバーの数が表示されます。
PQ_STATUS
列は、パラレル文がキューに入れられる理由を保持します。
関連項目:
V$RSRC_SESSION_INFO
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください
8.7.1.13 V$RSRCMGRMETRIC
V$RSRCMGRMETRIC
動的パフォーマンス・ビューを使用してパラレル実行のパフォーマンスを監視できます。
V$RSRCMGRMETRIC
ビューは、パラレル文のキューイングに関連する統計を表示します。
パラレル文のキューイングに関連する統計は、指定された1分間の統計を取得して約1時間保持するリソース・マネージャ・メトリックに追加されます。
列には、AVG_ACTIVE_PARALLEL_STMTS
、AVG_QUEUED_PARALLEL_STMTS
、AVG_ACTIVE_PARALLEL_SERVERS
、AVG_QUEUED_PARALLEL_SERVERS
およびPARALLEL_SERVERS_LIMIT
が含まれます。
関連項目:
V$RSRCMGRMETRIC
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください
8.7.2 セッション統計の監視
動的パフォーマンス・ビューを使用してセッション統計を監視し、パラレル実行のパフォーマンスを診断できます。
GV$PX_SESSION
を使用して、パラレルで実行するサーバー・グループの構成を判別します。この例では、セッション9が問合せコーディネータ、セッション7および21が最初のセットの最初のグループにあります。セッション18および20は2番目のセットの最初のグループです。この問合せでリクエストされたOPと与えられたDOPはどちらも2です。これは、次の問合せによる出力に示されます。
SELECT QCSID, SID, INST_ID "Inst", SERVER_GROUP "Group", SERVER_SET "Set", DEGREE "Degree", REQ_DEGREE "Req Degree" FROM GV$PX_SESSION ORDER BY QCSID, QCINST_ID, SERVER_GROUP, SERVER_SET;
出力は次のようになります。
QCSID SID Inst Group Set Degree Req Degree ---------- ---------- ---------- ---------- ---------- ---------- ---------- 9 9 1 9 7 1 1 1 2 2 9 21 1 1 1 2 2 9 18 1 1 2 2 2 9 20 1 1 2 2 2
シングル・インスタンスの場合、SELECT
FROM
V$PX_SESSION
を使用します。列名Instance
ID
は含めません。
GV$PX_SESSION
を使用した前の例の出力に表示されるプロセスが、同じタスクを完了するために連携します。次の例は、物理読取りに関してこれらのプロセスの進捗を判別するための、結合問合せの実行を示します。次の問合せを使用して特定の統計を追跡できます。
SELECT QCSID, SID, INST_ID "Inst", SERVER_GROUP "Group", SERVER_SET "Set", NAME "Stat Name", VALUE FROM GV$PX_SESSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC# AND NAME LIKE 'PHYSICAL READS' AND VALUE > 0 ORDER BY QCSID, QCINST_ID, SERVER_GROUP, SERVER_SET;
出力は次のようになります。
QCSID SID Inst Group Set Stat Name VALUE ------ ----- ------ ------ ------ ------------------ ---------- 9 9 1 physical reads 3863 9 7 1 1 1 physical reads 2 9 21 1 1 1 physical reads 2 9 18 1 1 2 physical reads 2 9 20 1 1 2 physical reads 2
このタイプの問合せを使用して、V$STATNAME
の統計を追跡します。問合せサーバー・プロセスの進捗を確認するには、この問合せを必要な回数繰り返します。
次の問合せは、V$PX_PROCESS
を使用して問合せサーバーのステータスを調べます。
SELECT * FROM V$PX_PROCESS;
出力は次のようになります。
SERV STATUS PID SPID SID SERIAL# IS_GV CON_ID ---- --------- ------ --------- ------ ------- ----- ------- P002 IN USE 16 16955 21 7729 FALSE 0 P003 IN USE 17 16957 20 2921 FALSE 0 P004 AVAILABLE 18 16959 FALSE 0 P005 AVAILABLE 19 16962 FALSE 0 P000 IN USE 12 6999 18 4720 FALSE 0 P001 IN USE 13 7004 7 234 FALSE 0
関連項目:
例で使用される動的パフォーマンス・ビューの詳細は、「動的パフォーマンス・ビューを使用したパラレル実行パフォーマンスの監視」を参照してください
8.7.3 システム統計の監視
動的パフォーマンス・ビューを使用してシステム統計を監視し、パラレル実行のパフォーマンスを診断できます。
V$SYSSTAT
ビューおよびV$SESSTAT
ビューには、パラレル実行を監視するためのいくつかの統計が含まれます。これらの統計を使用して、パラレル問合せ、DML、DDL、データ・フロー演算子(DFO)および操作の数を追跡します。問合せ、DMLまたはDDLそれぞれが、複数のパラレル操作および複数のDFOを含むことがあります。
さらに、統計では、マルチユーザー問合せ調整アルゴリズムまたは使用可能なパラレル実行サーバーの不足のために、DOPが減らされた(ダウングレードされた)問合せ操作の数もカウントされます。
また、これらのビューの統計では、パラレル実行のために送信されたメッセージ数もカウントされます。次の構文は、これらの統計を表示する方法の例です。
SELECT NAME, VALUE FROM GV$SYSSTAT WHERE UPPER (NAME) LIKE '%PARALLEL OPERATIONS%' OR UPPER (NAME) LIKE '%PARALLELIZED%' OR UPPER (NAME) LIKE '%PX%';
出力は次のようになります。
NAME VALUE -------------------------------------------------- ---------- queries parallelized 347 DML statements parallelized 0 DDL statements parallelized 0 DFO trees parallelized 463 Parallel operations not downgraded 28 Parallel operations downgraded to serial 31 Parallel operations downgraded 75 to 99 pct 252 Parallel operations downgraded 50 to 75 pct 128 Parallel operations downgraded 25 to 50 pct 43 Parallel operations downgraded 1 to 25 pct 12 PX local messages sent 74548 PX local messages recv'd 74128 PX remote messages sent 0 PX remote messages recv'd 0
次の問合せは、システムの各ワーカー(子プロセス)および問合せコーディネータ・プロセスの現在の待機状態を示します。
SELECT px.SID "SID", p.PID, p.SPID "SPID", px.INST_ID "Inst", px.SERVER_GROUP "Group", px.SERVER_SET "Set", px.DEGREE "Degree", px.REQ_DEGREE "Req Degree", w.event "Wait Event" FROM GV$SESSION s, GV$PX_SESSION px, GV$PROCESS p, GV$SESSION_WAIT w WHERE s.sid (+) = px.sid AND s.inst_id (+) = px.inst_id AND s.sid = w.sid (+) AND s.inst_id = w.inst_id (+) AND s.paddr = p.addr (+) AND s.inst_id = p.inst_id (+) ORDER BY DECODE(px.QCINST_ID, NULL, px.INST_ID, px.QCINST_ID), px.QCSID, DECODE(px.SERVER_GROUP, NULL, 0, px.SERVER_GROUP), px.SERVER_SET, px.INST_ID;
8.7.4 オペレーティング・システム統計の監視
Oracle Databaseで得られる情報とオペレーティング・システムのユーティリティ(UNIXベース・システムでのsar
やvmstat
など)で得られる情報はかなり重複しています。
オペレーティング・システムでは、I/O、通信、CPU、メモリーとページング、スケジューリング、同期プリミティブに関するパフォーマンス統計が提供されます。V$SESSTAT
ビューにも、オペレーティング・システム統計の主なカテゴリが示されます。
通常、I/Oデバイスやセマフォ操作に関するオペレーティング・システム情報を、データベースのオブジェクトや操作にマップするのは、Oracle Databaseの情報に比べて困難です。ただし、オペレーティング・システムによっては、優れたビジュアル化ツールが備えられており、データを収集する効率のよい手段があります。
CPUやメモリーの使用量に関するオペレーティング・システム情報は、パフォーマンスを調査するために大変重要です。おそらく最も重要な統計はCPU使用率です。下位レベルのパフォーマンス・チューニングの目標は、すべてのCPUでCPUバウンドになることです。これが達成されると、SQLレベルで作業して、CPUの使用率は低いがI/Oの使用率が高い代替計画を見つけることができます。
オペレーティング・システムのメモリーとページングの情報は、メモリー集中型データ・ウェアハウス・サブシステム(パラレルの通信、ソート、ハッシュ結合など)の間でメモリーをどのように分割するかを制御する、多数のシステム・パラメータのチューニングに役立ちます。