Exadata Hybrid Columnar Compression に関する検証 その5
<Exadata Hybrid Columnar Compression に関する検証 その5>
ペンネーム: ベロ
前回まで、Hybrid Columnar Compressionの動作を見てきました。第1回では
圧縮にかかる時間を各圧縮タイプで比較してみました。今回はSELECTにかかる
時間を各圧縮タイプで比較してみたいと思います。
以下のSQLを各圧縮タイプごとに実行し、イベント10046のSQLトレースからSQL
の実行に関する統計情報を見てみます。
select cust_last_name,count(*) from group by cust_last_name;
call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 13 8.70 48.09 169355 169618 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 15 8.71 48.10 169355 169618 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 13 9.00 21.97 61468 61828 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 15 9.00 21.97 61468 61828 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 13 7.93 13.16 32335 34350 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 15 7.93 13.16 32335 34350 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.02 0.33 29 58 0 Execute 1 0.00 0.00 0 0 0 Fetch 13 7.57 11.78 27693 21274 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 15 7.60 12.12 27722 21332 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.04 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 13 10.17 14.20 16369 14727 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 15 10.18 14.24 16369 14727 0
これでは、分かりづらいので、disk + queryの大きい順にソートしてみます。
|################################## 338973 |############ 123296 |####### 66685 |##### 49054 |### 31096 ----------------------------------------------------------- disk + query
では同様にelapsedでもソートしてみます。
|################################################ 48.10 |###################### 21.97 |############## 14.24 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |############# 13.16 |############ 12.12 ----------------------------------------------------------- elapsed
disk + queryを見るとReadすべきデータ量に依存して物理 + 論理I/Oの増加
傾向が見て取れます。圧縮によるデータサイズがそのまま、I/O量に比例して
ますね。
しかし、実際にSQLのレスポンス時間はどうでしょう?
ARCHIVE HIGHで圧縮されたデータは、I/O量が最も少ないにも関わらず、最も
高速とは行きませんでした。
これは、データの検索という物理I/Oに依存する処理とは別にデータを展開
するというCPUに依存した処理が必要だからです。
ARCHIVE HIGHで圧縮されたデータは高圧縮であるメリットと同時にデータを
展開する処理でオーバーヘッドが高いことを示していると思われます。
また、前回お話したように、Hybrid Columnar Compressionはデータを実行
環境に返す際にデータの展開処理を行うことが、既存のデータ処理に影響する
場合があるかも知れません。
以下、簡単なPL/SQLで検証してみます。
begin for rec in (select from SOE.QUERY_HIGH_COMPRESS_TABLE) loop null; end loop; end; /
上記のカラムの数でパフォーマンスが大きく異なります。
call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.02 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 177419 13.91 13.84 32314 206444 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 177421 13.91 13.86 32314 206444 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.04 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 177419 16.24 17.60 32314 206198 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 177421 16.24 17.64 32314 206198 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 177419 20.93 22.04 32335 211692 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 177421 20.93 22.04 32335 211692 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 177419 24.11 25.34 32338 212923 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 177421 24.11 25.34 32338 212923 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.03 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 177419 24.44 27.33 32339 213462 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 177421 24.44 27.37 32339 213462 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.02 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 177419 29.25 33.04 32375 219367 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 177421 29.25 33.06 32375 219367 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 177419 31.51 39.23 32451 229278 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 177421 31.51 39.23 32451 229278 0 call count cpu elapsed disk query current ------- ------ -------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 Execute 1 0.00 0.00 0 0 0 Fetch 177419 38.24 42.20 32456 229766 0 ------- ------ -------- ---------- ---------- ---------- ---------- total 177421 38.24 42.20 32456 229766 0
これも、disk + queryでソートしてみます。
|######################## 238758 |######################## 238512 |######################## 244027 |######################### 245261 |######################### 245801 |######################### 251742 |########################## 261729 |########################## 262222 ----------------------------------------------------------- disk + query
さらに elapsedでソートしてみます。
|############## 13.86 |################## 17.64 |###################### 22.04 |######################### 25.34 |########################### 27.37 |################################# 33.06 |####################################### 39.23 |########################################## 42.20 ----------------------------------------------------------- elapsed
I/O関連の統計情報にほとんど変化が見られないのに比べ、実行速度は
カラム数と比例して長くなっています。
これは、データの展開処理にて多くのCPUリソースが必要とされるためだと
思われます。
Hybrid Columnar CompressionがDWH系で威力を発揮することを考えるとテーブル
構造は非正規化されていることも多いと思われますが、安直に
select * from ~と処理してしまうと、相当量の無駄が発生してしまうことが
予想されます。
適切なカラムを選択して処理することが大事になると思います。
(*文中の測定結果はExadataを使用しての測定結果ではありません)