- SVV_TABLE_INFO の unsorted(%) と vacuum_sort_benefit(%) の値が大きい場合に VACUUM SORT を実行するとクエリ性能が改善する可能性がある。
- unsorted(%): ソートされていない割合
- vacuum_sort_benefit(%): クエリのアクセステーブルへの選択率が高い、多数のクエリがテーブルにアクセスしていると値が大きくなる
- VACUUM が実行される閾値(TO threshold PERCENT で指定可能)はデフォルト95%で、ソート済み行が95%超の場合、 VACUUM SORT がスキップされ、削除対象としてマークされていない行の割合が 95% 超の場合、VACUUM DELETE がスキップされる。
SVV_TABLE_INFO - Amazon Redshift
列名 データ型 説明 unsorted numeric(5,2) テーブル内のソートされていない行の割合。 estimated_visible_rows numeric(38,0) テーブル内の予測された行。この値には、削除対象としてマークされた行は含まれません。 vacuum_sort_benefit numeric(12,2) VACUUM ソートを実行した場合に推定されるスキャンクエリパフォーマンスの最大改善率 (%)。
Amazon Redshift は、各テーブルのソートキーを使用するスキャンクエリを追跡します。Amazon Redshift は、テーブルが完全にソートされている場合、各テーブルのデータのスキャンやフィルターの最大改善率を見積ります。この見積もりは、vacuum_sort_benefitのSVV_TABLE_INFO列で表示されます。この列は、unsorted列と一緒に使用することができ、クエリの際、いつテーブルで VACUUM SORT を手動で実行したら効率的かを判断します。unsorted列は、テーブルの物理的なソート順を反映しています。vacuum_sort_benefit 列は、VACUUM SORT を手動で実行することでソートによるテーブルへの影響を特定します。
例えば、次のクエリを考えてみます。
select "table", unsorted,vacuum_sort_benefit from svv_table_info order by 1;table | unsorted | vacuum_sort_benefit -------+----------+--------------------- sales | 85.71 | 5.00 event | 45.24 | 67.00「sales」というテーブルの場合、86% が物理的にソートされていなくても、86% ソートされていないテーブルからのクエリ実行の影響は、5% だけとなります。理由としては、クエリがテーブルの一部にしかアクセスしていないか、ごく少数のクエリがテーブルにアクセスしたかのどちらかとなります。「event」というテーブルの場合、テーブルは、45% が物理的にソートされていません。ですが、67% のクエリ実行の影響は、クエリがテーブルの大部分にアクセスしたか、テーブルにアクセスしたクエリが多かったことを表しています。「event」というテーブルには、VACUUM SORT の実行が潜在的に有効となります。
テーブルのバキューム処理 - Amazon Redshift
TO threshold PERCENT
VACUUM が削除フェーズをスキップする最低のしきい値、および削除フェーズでスペースを再利用する対象となるしきい値を指定する句です。ソートしきい値は、バキューム処理の前の指定されたテーブルにおけるソート済みの行の合計の割合です。 削除しきい値は、バキューム処理後に削除対象としてマークされていない行の合計の最低割合です。VACUUM は、テーブルのソート済みの行の割合がソートしきい値以下の場合のみ行を再ソートするため、Amazon Redshift は、バキューム処理の時間を大幅に削減できます。同様に、VACUUM は削除対象としてマークされた行のスペースを 100 パーセント再利用するよう制約を受けない場合、削除対象としてマークされた行を数行のみ含むブロックの書き換えをスキップできます。
例えば、しきい値に 75 を指定すると、テーブルの行の 75 パーセント以上がすでにソート済みの場合、VACUUM はソートフェーズをスキップします。削除フェーズでは、バキューム処理後に削除対象としてマークされていない行がテーブルに 少なくとも 75 パーセントあるようなテーブルを VACUUM はディスク領域の再利用の対象として設定します。しきい値の値は、0 から 100 の間の整数でなければなりません。デフォルトは 95 です。100 という値を指定すると、VACUUM はすでに完全にソートされていない限り常にテーブルをソートし、削除対象としてマークされたすべての行のスペースを再利用します。0 という値を指定すると、VACUUM は一切テーブルをソートせず、一切スペースを再利用しません。
TO threshold PERCENT パラメータを含める場合は、テーブルの名前も指定する必要があります。テーブル名を省略すると、VACUUM は失敗します。
TO threshold PERCENT パラメータは REINDEX と併用できません。
VACUUM - Amazon Redshift
自動VACUUM 実行履歴は SYS_VACUUM_HISTORY で確認できる。


