ゆとりずむ

東京で働く意識低い系ITコンサル(見習)。金融、時事、節約、会計等々のネタを呟きます。

データ・セグメントの圧縮とAdvanced Compressionの違いについて

まえがき

仕事中、ちょっと良く分からなくなってしまったので、備忘録も兼ねてポスト。なお、私的に調べた結果なので、内容は一切保証できない( ゚Д゚)y─┛~~

基本的な比較

項目 データ・セグメント圧縮 Advanced Compression
使用条件 9i以上のEnterpriseEdition 11g以上のEnterpriseEdition+有料オプション
圧縮対象 任意のタイミングで実行可能。
ダイレクト・ロードした際のみ圧縮可能。
任意のタイミングで実行可能。
通常のInsert時でも圧縮可能。

・・・ということらしい。

効果

基本的な効果としては、両者ともデータの圧縮ができ、それだけディスクを節約することが出来る。
一方、CPUの負荷は若干上がる。ただ、ディスクの負荷が高く、CPUはディスクの処理待ちをしている場合が多いため、総合的な書き込み処理は高速化される場合が多い。
副次的な効果としては、データが圧縮されているため、selectを投げた際のディスクアクセスが減って、select処理も高速化される。

実例

データ・セグメント圧縮を実行し、USER_SEGMETNSを見たところ、マスタテーブルは95%に圧縮、トランザクションテーブルは30%に圧縮された。恐らくトランザクションテーブルは、冗長性が高かったためこのような結果になったと思われる。
処理速度等は未検証だが、大本営発表曰く、selectが4倍高速化される場合もあるようだ。

使用用途

データ・セグメント圧縮は、圧縮対象がダイレクト・ロードした際しか働かないので、常時insertの走るテーブルには不向き。
ちなみにダイレクト・ロードとは、IMPORT処理やLoaderを使った時の処理、または通常のinsertに/*+ append */をつけた場合に実行される処理で、メモリを通らずディスク上で直接書き込みを行う。なお、ダイレクト・ロードを実行している間は、そのテーブルはロックされ書き込みができなくなる。
基本的には、データ分析を行うためのDWH向けの機能だが、任意のタイミングで圧縮は実行できるので、オンラインを止めて月次で圧縮を流したりすることは出来る。update処理は負荷が相当高まるそうなので、insertのみのデータの持ち方(常に赤黒を作るような構造)をしているのであれば、定期的にデータ圧縮をしながら使う使い方も有りそうだ。