検索
連載

パラレル処理の有効性と落とし穴を検証するOracleパーティショニング実践講座(4)(2/4 ページ)

本連載では、大規模データベースでのパフォーマンス・チューニングの手法として、Oracleパーティショニングを解説する。単なる機能説明にとどまらず、実機による検証結果を加えて、より実践的な内容をお届けする。(編集部)

Share
Tweet
LINE
Hatena

パラレル・クエリの検証結果

 図2の結果から、並列度を4に指定した場合に最大3.7倍のレスポンス改善を確認できました。

 今回の検証用SQLの場合、走査した結果をグループ処理、ソート処理するため、それぞれの操作が並列化され(イントラオペレーションの並列化)、さらに操作間の処理も並列化(インターオペレーションの並列化)されます。インターオペレーションの並列化により、指定した並列度の2倍のパラレル実行サーバが使用されています。

 これによって、並列度を4に指定した場合、8個のパラレル実行サーバが実行されていたことになります。検証機のCPU数は4ですので、オラクル社よりパラレル処理の目安として提示されている「CPU数の2倍程度の並列度」が適した並列度であることを確認できたのではないでしょうか。

注:以下のグラフで使用する用語は以下の意味です。

 

PQn
nが並列度の意味(例:PQ4は並列度4のパラレル・クエリ)。

MP8
M=Month(月でレンジ)、P8=8ハッシュでのコンポジット・レンジ−ハッシュ・パーティションの意味。

IPQ
インターノード・パラレル・クエリの意味。


図2 「MP8」である年の全商品の売上実績を検索した場合の、「PQ」のレスポンス効果の傾向(表サイズ:100Gbytes)
図2 「MP8」である年の全商品の売上実績を検索した場合の、「PQ」のレスポンス効果の傾向(表サイズ:100Gbytes)

 非パラレルおよび並列度4のパラレル・クエリを実行した際のCPU使用率を比べると図3、図4のように、パラレル・クエリにより一度に複数のプロセスで処理を分割して行うことでCPUリソースをより活用できることが分かります。

図3 非パラレルでのCPU使用率の推移
図3 非パラレルでのCPU使用率の推移
図4 「PQ4」でのCPU使用率の推移
図4 「PQ4」でのCPU使用率の推移

インターノード・パラレル・クエリの検証結果

 次に、Oracle RACとの組み合わせによるインターノード・パラレル・クエリの効果について確認します。図5の結果から、並列度を8に指定した場合に最大5.0倍のレスポンス改善が見られます。インターノード・パラレル・クエリにより、Oracle RACを構成している2ノード分のCPUリソースを利用することができるため、単一ノード(シングルノード)の2倍の並列度を指定したケースが最も効果を確認できる結果となりました。

 ちなみに、並列度を2、4と指定したケースでは、SQLを発行したノードはクエリ・コーディネータの役割しか果たさず、片方のノードだけでパラレル実行サーバが動作する事象を確認しています。インターノード・パラレル・クエリでは複数のノードに処理を分けるオーバーヘッドとともに適切な並列度を指定しなければ、単一ノード(シングルノード)と比べても期待した効果が出ない場合があるのかもしれません。

図5 「MP8」である年の全商品の売上実績を検索した場合の、「IPQ」ごとのレスポンス効果(表サイズ:100Gbytes)
図5 「MP8」である年の全商品の売上実績を検索した場合の、「IPQ」ごとのレスポンス効果(表サイズ:100Gbytes)

 さらに、インターノード・パラレル・クエリにて、並列度を16、32と、CPU数の2倍以上の並列度を指定した場合、図6のように、待機イベント「PX Deq: reap credit」(スレーブ・プロセスのメッセージ待ち)が増加傾向であることも確認できます。多くの並列度を指定することでCPUリソースが枯渇した状態となり、スレーブ・プロセス(パラレル実行サーバ)のメッセージの送受信にも影響を及ぼしてしまうのではないでしょうか。

図6 「MP8_IPQ」実行時における主な待機イベントの傾向(Oracle RAC1ノード側)
図6 「MP8_IPQ」実行時における主な待機イベントの傾向(Oracle RAC1ノード側)

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る