それでは実際の検索への影響を確認してみましょう。今回の検証では、図4のように圧縮された表に対するSQL実行時間は、非パーティショニングの場合もパーティショニングの場合も20%程度向上しており、データ圧縮による効果が確認できました。ただ、SQLでアクセスするブロックは圧縮率と同等程度の効果が出ていますが、その効果がSQL実行時間に反映されていないことも分かります。
図5は、図4のSQL実行時のCPU使用率を表したグラフです。データ圧縮を実施した場合の方がCPUリソースの使用率が高くなっていることが分かります。圧縮されたブロックからデータを取り出す際に少なからずCPUリソースを消費しており、この影響がアクセスブロック減少の効果を打ち消していたのではないでしょうか。
以上のように、圧縮した表を検索する場合、圧縮されたブロックを解凍するために使用されるCPU負荷は若干増えるものの、圧縮によるアクセスブロックの減少効果が高くSQL実行時間が短縮されることが確認できました。
また、データ圧縮はパーティションとの併用により、
といった効果が得られます。
全5回にわたって大規模データを取り扱うために、パーティショニング、パラレル、データ圧縮の機能について、その特徴と有効性について紹介しましたが、いかがだったでしょうか。
パーティショニングは大規模データだけではなく小規模なデータ量でも効果を発揮すること、パラレル処理は大規模データへのアクセスでサーバリソース(CPU、メモリ、ディスクI/O)に余裕がある場合に、データ圧縮は全表走査や範囲走査といった多くのブロックにアクセスする場合に効果を発揮することが分かりました。また、図6のようにそれぞれを組み合わせて利用することで相乗効果を発揮します。
本連載が皆さんのOracleデータベースを構築するうえでの一助になれば幸いです。(連載完)
Copyright © ITmedia, Inc. All Rights Reserved.