圧縮する表を選定する方法について説明します。
圧縮する表を選定する基準を以下に示します。これに従い、対象となる表を選定してください。
データの特性から見た表の選定基準
圧縮率はデータの種類と量により異なるため、以下に該当する表を圧縮候補としてください。以下に該当しない表を圧縮してもI/O効率の向上の効果が見込めず、CPUの使用率だけが増加する可能性があります。そのため、候補とした表のうち、データの特性により多く合致する表を圧縮候補としてください。選定基準を満たす表を圧縮することでより高い圧縮率が見込めます。
大量のデータが格納されている
画像データなどの圧縮済みデータが格納されていない
重複するデータが多い
参考
重複するデータについて
同一DSIで同じバイト列のパターンが多く存在し、表全体のデータ傾向が均一である場合、重複するデータが多いと判断できます。たとえば、以下のような場合が該当します。
複数行の中で、同じカラムに同じバイト列が入っている場合
例:住所のカラムに“東京都”が複数存在する
行および列にまたがって同じバイト列が入っている場合
例:XMLデータが格納されているカラムで、要素名が複数存在する
また、スループット改善を目的とする場合、上記の選定基準の他に、SQL文でデータベースの入出力待ちが多く発生している表を候補とすることで、より高いスループットの向上が見込めます。なお、候補とした表に対する参照処理の比率が高いほど性能改善の効果が高い傾向があります。
注意
500メガバイト以下のデータ量では、データの圧縮効果が出ない場合があります。
圧縮率の確認は、業務で利用するデータまたはそれに準ずるデータを使用して、実際にデータを格納することで確認します。ディスク使用量の見積もりなどで利用するため、確認した圧縮率は控えておいてください。
圧縮率の確認は、圧縮前と圧縮後のDSIの使用量を比較することにより行います。
データアクセス時のI/O効率は、圧縮率に応じて向上し、ディスク使用量は、最大で圧縮率分の一に削減することが期待できます。
圧縮率の確認手順を以下に示します。
[すでに圧縮対象の表を運用している場合]
(1) 圧縮対象とするDSIのデータを抽出します。 ――― rdbunlsqlコマンド (2) (1)のDSIの使用状況を取得します。 ――― rdbudsiコマンド (fオプション) (3) (1)のDSIの定義に圧縮指定を追加して定義します。(別領域) ――― rdbddlexコマンド (4) (1)で抽出したデータを(3)で定義したDSIに格納します。 ――― rdbsloaderコマンド (5) (4)でデータを格納したDSIに対して、DSIの使用状況を ――― rdbudsiコマンド 取得します。 (fオプション) (6) (2)と(5)で取得した圧縮前後のDSI使用状況から圧縮率を計算します。――― 圧縮率の計算
[初めて定義する表の場合]
(1) 圧縮対象とするDSIのデータを用意します。 (2) (1)のDSIを圧縮指定なしで定義します。 (3) (1)で用意したデータを(2)で定義したDSIに格納します。 ――― rdbsloaderコマンド (4) (2)のDSIの使用状況を取得します。 ――― rdbudsiコマンド (fオプション) (5) (2)のDSIの定義に圧縮指定を追加して定義します。(別領域) ――― rdbddlexコマンド (6) (1)で用意したデータを(5)で定義したDSIに格納します。 ――― rdbsloaderコマンド (7) (6)でデータを格納したDSIに対して、DSIの使用状況を ――― rdbudsiコマンド 取得します。 (fオプション) (8) (4)と(7)で取得した圧縮前後のDSI使用状況から圧縮率を計算します。――― 圧縮率の計算
ポイント
圧縮対象とするDSIのデータについて
表全体のデータ傾向が同じであれば、格納されているデータの一部を取得して圧縮率の確認を行うことができます。この場合、圧縮率を求めるために500メガバイト以上のデータで確認してください。データの一部を抽出するにはrdbunlsqlコマンドで500メガバイト以上のデータを取得できるようなSQL文を指定してください。なお、全データを抽出するには、rdbunlコマンドを使用してください。
[データの一部を抽出するSQL文の例]
SELECT * FROM STOCKS.在庫表 WITH OPTION LIMIT(1000)
圧縮率 = 圧縮前のDSIのデータ格納に必要なページ数 / 圧縮後のDSIのデータ格納に必要なページ数 データ格納に必要なページ数 = A * (B / 100) * (C / 100) A:割付けページ数 B:割付けページ数に対してデータが格納されているページの割合(単位は%) C:使用中ページに対してデータが格納されている領域の割合(単位は%)
A、B、およびCの値は、rdbudsiコマンドの出力情報を利用します。
参照
rdbudsiコマンドの出力情報、およびコマンドの使用方法については、“Symfoware Server コマンドリファレンス”を参照してください。SQL文については“Symfoware Server SQLリファレンス”を参照してください。
以下に、圧縮率の確認手順の操作例およびDSIの定義例を示します。
圧縮率の確認手順の操作例
$ rdbunlsql -d 在庫管理DB -o -s "SELECT * FROM STOCKS.在庫表 WITH OPTION LIMIT(1000)" /disk3/rdb/data/unlsql.dat $ rdbudsi -i 在庫管理DB.在庫表DSI -f $ rdbddlex -d 在庫管理DB /disk3/rdb/data/create.dat (圧縮指定のDSIを定義) $ rdbsloader -mi -i 在庫管理DB.在庫表DSI2 -o /disk3/rdb/data/unlsql.dat $ rdbudsi -i 在庫管理DB.在庫表DSI2 -f
圧縮指定のDSIの定義例
CREATE DSI 在庫表DSI2 DSO 在庫表DSO COMPRESS ALLOCATE DATA ON DBSPACE001 SIZE 500M ↑ 圧縮指定