11.21.7 データの圧縮率の測定方法
データの圧縮率の測定方法について説明します。実際にデータを圧縮・格納する前にどれくらい圧縮されるのか知りたい場合や,データの格納後にどれくらい圧縮されたのか確認したい場合に測定してください。ただし,抽象データ型(XML型)の列の場合,pddbstで確認できないため,圧縮・格納後の測定はできません。
(1) データを圧縮・格納する前の測定方法
データの圧縮率は,圧縮対象となるデータの実態によって大きく異なります。正確な圧縮率は実際にデータを圧縮・格納した後でないと測定できませんが,gzip※を使用して算出した圧縮後のデータ長の概算値を用いることで,圧縮率の概算値を計算できます。計算式を次に示します。
- 注※
-
HiRDBが圧縮に使用するアルゴリズム(Deflate)と同等の圧縮アルゴリズムを使用しています。
- 計算式
圧縮率(%)= {(gzipによる圧縮後のデータ長×1.05※)÷圧縮前のデータ長}×100
- 注※
-
zlibとgzipでは,圧縮時に付与される圧縮情報を管理するヘッダの形式が異なるため,圧縮後のデータサイズに5%の余裕値を加えます。
(2) データを圧縮・格納した後の測定方法
実際にデータを圧縮・格納した後で圧縮率の概算値を算出する計算式を次に示します。
- 計算式
圧縮率(%)= (圧縮後のデータ長※1の合計÷圧縮前のデータ長※2の合計)※3×100
- 注※1 算出手順を次に示します。
-
-
-dオプション指定で,RDエリア単位又は表単位にデータベース状態解析ユティリティ(pddbst)を実行します。
-
出力結果の<BINARY segment>の情報から,次の計算式で圧縮後のデータ長を求めます。
10 Σni×a×b i=1
ni:バイナリ専用セグメントのUsed Page Ratio(使用中ページの比率別ページ数)が示す各比率の最大値(例えば,Used Page Ratioが1〜10%の場合は10%で0.1,11〜20%の場合は20%で0.2となります)
a:niに対応したPageの値
b:バイナリ専用セグメントのページサイズ
-
1.で対象としたRDエリア,又は表にBINARY型の圧縮列と非圧縮列が混在している場合,2.の算出結果から非圧縮列のデータ長を減算します。非圧縮列のデータ長は次のSQLを実行して算出します。
select sum(length(非圧縮列名)) from 表識別子 〔in RDエリア名〕
-
- 注※2
-
圧縮前のデータ長は,非圧縮列のデータ長の算出方法(注※1の3.を参照)と同じSQLを実行して算出します。
- 注※3
-
1.0以上の場合,圧縮によってデータ長が増加した,又は圧縮の効果が小さいことを示します。この場合は,圧縮列の定義を変更して,圧縮指定を解除することをお勧めします。圧縮指定の解除については,「圧縮列の定義を変更(圧縮指定を解除)する方法」を参照してください。