11.11.6 データ用DBエリアの空き容量を確保する方法
ここでは,データ用DBエリアの空き容量を確保する方法について説明します。
- 重要
-
データ用DBエリアの空き容量を確保する前に,データ用DBエリアを拡張できるかどうかを検討してください。データ用DBエリアの拡張については,「11.11.3 データ用DBエリアを拡張する方法(データ用DBエリアファイルの追加)」を参照してください。
データ用DBエリアの拡張ができない場合は,次に示す対処方法1,または対処方法2を実施して,データ用DBエリアの空き容量を確保してください。対処方法1,または対処方法2を実施してもデータ用DBエリアの空き容量を確保できないときは,対処方法3を実施してください。
- 対処方法1
-
チャンクのアーカイブを行います。チャンク内のデータを圧縮して,データ用DBエリアの空き容量を確保します。
詳細については,「(1) データ用DBエリアの空き容量を確保する方法(データの圧縮)」を参照してください。
- 対処方法2
-
実表の再編成を行います。無効な領域を削除したり,データを圧縮したりして,データ用DBエリアの空き容量を確保します。
詳細については,「(2) データ用DBエリアの空き容量を確保する方法(実表の再編成)」を参照してください。
- 対処方法3
-
不要なデータを削除します。不要なデータを削除して,データ用DBエリアの空き容量を確保します。
詳細については,「(3) データ用DBエリアの空き容量を確保する方法(不要なデータの削除)」を参照してください。
- 〈この項の構成〉
(1) データ用DBエリアの空き容量を確保する方法(データの圧縮)
空き容量を確保したいデータ用DBエリアにアーカイブマルチチャンク表がある場合は,チャンクをアーカイブすることを検討してください。adbarchivechunkコマンドで,チャンクをアーカイブ状態にしてチャンク内のデータを圧縮すると,データ用DBエリアの空き容量を増やすことができます。
- メモ
-
チャンクのアーカイブについては,「2.15.1 チャンクアーカイブ機能とは」を参照してください。
チャンク内のデータを圧縮する手順を次に示します。
手順
-
アーカイブマルチチャンク表のスキーマ名と表識別子を調査する
次に示すSELECT文を実行して,データ用DBエリアに格納されているアーカイブマルチチャンク表のスキーマ名と表識別子を調査してください。
- 指定例
-
SELECT "MASTER"."SQL_DIV_TABLE"."TABLE_SCHEMA", "MASTER"."SQL_DIV_TABLE"."TABLE_NAME" FROM "MASTER"."SQL_DIV_TABLE","MASTER"."SQL_TABLES" WHERE "DBAREA_ID" = (SELECT "DBAREA_ID" FROM "MASTER"."SQL_DBAREAS" WHERE "DBAREA_NAME" = ?) AND "MASTER"."SQL_DIV_TABLE"."TABLE_SCHEMA" = "MASTER"."SQL_TABLES"."TABLE_SCHEMA" AND "MASTER"."SQL_DIV_TABLE"."TABLE_NAME" = "MASTER"."SQL_TABLES"."TABLE_NAME" AND "IS_ARCHIVABLE" = 'Y'
adbsqlコマンドで上記のSELECT文を実行した場合,?パラメタに対する入力データの入力要求があります。入力要求には,空き容量を確保したいデータ用DBエリアのDBエリア名を入力してください。
-
アーカイブ状態にするチャンクを検討する
チャンクをアーカイブ状態にして,データ用DBエリアの空き容量を確保します。アーカイブマルチチャンク表内のアーカイブ状態ではないチャンクの中から,アーカイブするチャンクを検討してください。
チャンクをアーカイブすると,アーカイブされていないチャンク内のデータを検索するときに比べて,検索時間が長くなります。そのため,検索する頻度が少ないチャンクをアーカイブすることを推奨します。例えば,作成日時が新しいチャンク内のデータを検索する頻度が多い場合は,作成日時が古いチャンクをアーカイブしてください。
アーカイブするチャンクの情報を確認する場合は,-d usedオプションを指定したadbdbstatusコマンドを実行して,DBエリア,表とインデクスの使用量情報を確認してください。または,システム表のSTATUS_CHUNKS表をSELECT文で検索してください。詳細については,「11.4.8 チャンクの状態や作成されているチャンク数を確認する方法」の「(1) adbdbstatusコマンドを実行する場合」または「(3) システム表STATUS_CHUNKSを検索する場合」を参照してください。
-
チャンクをアーカイブ状態にして確保できる空き容量を調査する
チャンクをアーカイブ状態にすると,そのチャンクの使用量分だけ,データ用DBエリアの空き容量を確保できます。チャンクをアーカイブ状態にして確保できる空き容量を確認する場合は,-d usedオプションを指定したadbdbstatusコマンドを実行してください。DBエリア,表とインデクスの使用量情報が出力されたら,Chunk_IDをキーにして,Used_segmentsとUsed_pagesを確認してください。
詳細については,「11.4.8 チャンクの状態や作成されているチャンク数を確認する方法」の「(1) adbdbstatusコマンドを実行する場合」を参照してください。
-
チャンクをアーカイブ状態にしてデータを圧縮する
adbarchivechunkコマンドを実行して,チャンクをアーカイブします(チャンク内のデータを圧縮します)。チャンクをアーカイブする方法については,「11.4.17 チャンクをアーカイブする方法(アーカイブマルチチャンク表使用時)」を参照してください。
(2) データ用DBエリアの空き容量を確保する方法(実表の再編成)
実表に対して次の作業を繰り返し実行した場合,実表を再編成することを検討してください。データ用DBエリアの空き容量を確保できる可能性があります。
-
ローストア表に対するSQL文を使用した行の更新,および行の削除
-
カラムストア表に対するSQL文を使用した行の追加,行の更新,および行の削除
-
マルチチャンク表に対するadbimportコマンドを使用したバックグラウンドインポート
- メモ
-
実表を再編成すると,データ用DBエリアの空き容量を確保できる理由を次に示します。
-
SQL文による行の更新,行の削除,およびadbimportコマンドによるバックグラウンドインポートを繰り返し実行すると,無効な行データや再利用されない空き領域が増加することがあります。実表を再編成すると,無効な行データや再利用されない空き領域が解放されます。そのため,データ用DBエリアの空き容量を確保できる可能性があります。
-
カラムストア表に対してSQL文を使用した行の追加を実行すると,カラムストア形式ではなくローストア形式で追加されます。ローストア形式で追加されたデータは圧縮されません。実表やインデクスを再編成すると,カラムストア形式でデータが追加されます。カラムストア形式で追加されたデータは圧縮されるため,データ用DBエリアの空き容量を確保できる可能性があります。
-
実表を再編成する手順を次に示します。
手順
-
確保できる空き容量を調査する
実表を再編成すると確保できる空き容量を,次の計算式から見積もってください。
- 計算式(実表の再編成で確保できる空き容量)(単位:メガバイト)
-
実表の再編成で確保できる空き容量 = 再編成前の実表の使用量 - 再編成後の実表の使用量
- 再編成前の実表の使用量(単位:メガバイト)
-
「10.9.2 実表の状態や使用量を確認したい場合」の「(2) 実表の使用量を確認する場合」を参照して,再編成前の実表の使用量を確認してください。
- 再編成後の実表の使用量(単位:メガバイト)
-
「5.8 データ用DBエリアの容量見積もり」を参照して見積もってください。なお,参照先の計算式の単位はキロバイトです。そのため,メガバイトに換算してください。
また,実表を再編成すると,実表に定義されたインデクスも再編成されます。インデクスを再編成すると確保できる空き容量を,次の計算式から見積もってください。
- 計算式(インデクスの再編成で確保できる空き容量)(単位:メガバイト)
-
インデクスの再編成で確保できる空き容量 = 再編成前のインデクスの使用量 - 再編成後のインデクスの使用量
- 再編成前のインデクスの使用量(単位:メガバイト)
-
次の個所を参照して,再編成前のインデクスの使用量を確認してください。
- 再編成後のインデクスの使用量(単位:メガバイト)
-
「5.8 データ用DBエリアの容量見積もり」を参照して見積もってください。なお,参照先の計算式の単位はキロバイトです。そのため,メガバイトに換算してください。
-
実表を再編成する
次の個所を参照して,実表を再編成してください。実表を再編成すると,定義されているインデクスも再編成されます。なお,データの格納効率を求める必要はありません。
- 重要
-
-
マルチチャンク表の場合,不要なチャンクがあるときは,再編成する前に不要なチャンクの削除を検討してください。不要なチャンクの削除については,「(3) データ用DBエリアの空き容量を確保する方法(不要なデータの削除)」を参照してください。
-
実表の再編成では,一時的にデータを削除します。そのため,再編成中は,実表のデータを参照できません。
-
大量のデータを格納している実表の場合,再編成のときにエクスポートするデータサイズが大きくなります。また,再編成にも時間が掛かります。データをエクスポートするための領域がないときや,再編成に必要な時間を確保できないときは,別の方法でデータ用DBエリアの空き容量を確保することを検討してください。
-
(3) データ用DBエリアの空き容量を確保する方法(不要なデータの削除)
ここでは,不要なデータを削除して,データ用DBエリアの空き容量を確保する方法について説明します。
次に示す方法ではデータ用DBエリアの空き容量を確保できない場合,不要なデータを削除することを検討してください。
次に示す不要なデータを削除することで,データ用DBエリアの空き容量を確保できます。
-
不要なインデクス
-
マルチチャンク表にある不要なチャンク
- 重要
-
不要なデータの削除には次のリスクが伴います。
-
運用誤りによるデータの損失
-
SQL文やコマンドの性能の低下
そのため,各削除処理の留意事項を確認した上で,適用を検討してください。
-
- ■空き容量を確保したいデータ用DBエリアに不要なインデクスがある場合
-
不要なインデクスを削除すると空き容量を確保できます。手順を次に示します。
手順
-
削除するインデクスを検討する
削除するインデクスを検討する場合は,アクセスパスの統計情報から,インデクスの使用有無を確認することを推奨します。
SQLトレース機能を有効にしている場合,実行したSQL文の終了時に出力されるアクセスパスの統計情報を確認すると,SQL文がインデクスを使用しているかどうかを確認できます。実行しているSQL文が使用していないインデクスを削除するようにしてください。
SQLトレース機能については,「10.11 SQLトレース機能の運用」を参照してください。アクセスパスの統計情報については,「10.11.3 アクセスパスの統計情報の出力例と出力項目」を参照してください。
-
確保できる空き容量を調査する
削除するインデクスの使用量分だけ,データ用DBエリアの空き容量を確保できます。インデクスの使用量の確認については,次の個所を参照してください。
-
インデクスを削除する
「11.3.9 インデクスの削除」を参照して,不要なインデクスを削除してください。
留意事項
-
インデクスを削除した場合,削除したインデクスを使用していたSQL文の性能が低下するおそれがあります。
-
インデクスの削除後に同じインデクスを再定義する必要がある場合,インデクスを削除する前にインデクスの再定義に必要な定義情報を取得しておいてください。定義情報の取得については,「付録B.22 ディクショナリ表の検索」の「(30) インデクスの定義情報を調べる場合」を参照してください。
-
- ■空き容量を確保したいデータ用DBエリアに不要なチャンクを含むマルチチャンク表がある場合
-
PURGE CHUNK文を使用してマルチチャンク表の不要なチャンクを削除すると空き容量を確保できます。手順を次に示します。
手順
-
削除するチャンクを検討する
マルチチャンク表内のチャンクの状態を確認して,削除するチャンクを検討してください。例えば,次に示すチャンクは不要である可能性が高いため,優先的に削除するようにしてください。
-
削除仕掛中のチャンク
-
アーカイブ状態ではない待機状態のチャンク
-
検索頻度が極端に少ないチャンク(作成日時が古いチャンクなど)
チャンクの情報を確認する場合は,-d usedオプションを指定したadbdbstatusコマンドを実行して,DBエリア,表とインデクスの使用量情報を確認してください。または,システム表のSTATUS_CHUNKS表をSELECT文で検索してください。詳細については,「11.4.8 チャンクの状態や作成されているチャンク数を確認する方法」の「(1) adbdbstatusコマンドを実行する場合」または「(3) システム表STATUS_CHUNKSを検索する場合」を参照してください。
-
-
確保できる空き容量を調査する
削除するチャンクの使用量分だけ,データ用DBエリアの空き容量を確保できます。チャンクの使用量を確認する場合は,-d usedオプションを指定したadbdbstatusコマンドを実行してください。DBエリア,表とインデクスの使用量情報が出力されたら,Chunk_IDをキーにして,Used_segmentsとUsed_pagesを確認してください。
詳細については,「11.4.8 チャンクの状態や作成されているチャンク数を確認する方法」の「(1) adbdbstatusコマンドを実行する場合」を参照してください。
-
チャンクを削除する
「11.4.6 チャンク単位にデータを削除する方法」を参照して,不要なチャンクを削除してください。
留意事項
-
削除後に参照する可能性があるチャンク内のデータが存在する場合は,チャンクを削除する前にエクスポートしておいてください。チャンク内のデータをエクスポートする方法については,「11.4.5 チャンク単位にデータをエクスポートする方法」を参照してください。
-
アーカイブ状態のチャンクを削除してもデータ用DBエリアの空き容量を確保できません。
-