統計情報とは
統計情報を収集することで、クエリ実行時にオプティマイザが正しいプロジェクションを選択する精度が向上し安定したパフォーマンスを得ることができます。統計情報の収集を実行すると、ディスクのデータを読み込み、カーディナリティや、データの各ノードの分散状況といった情報を収集します。収集したデータはカタログに書き込まれます。
統計情報を取得するタイミング
統計情報は可能な限り最新であることが好ましいため、日毎のバッチ処理に組み込む等頻繁に取得することが理想的です。頻繁に取得することが難しい場合は、以下のタイミングを目安として取得してください。
・初期データロード後
・データが50%以上変更された場合
・時間が経過して、クエリのパフォーマンスが変わった場合
統計情報の取得方法
ANALYZE_STATISTICS()関数を使用することにより、統計情報を取得できます。
ANALYZE_STATISTICS()関数
構文
ANALYZE_STATISTICS()関数の構文は以下です。
dbadmin=> SELECT ANALYZE_STATISTICS('テーブル名','カラム名',パーセンテージ);パラメータ | 説明 |
|---|---|
テーブル名 | 統計情報を取得したいテーブルを指定します。 |
カラム名 | 統計情報を取得したいカラムをカンマ区切りで指定します。 |
パーセンテージ | ディスクから取得するデータの割合を指定します。 |
実行例
例①: table1テーブルの全カラムについて、統計情報を10%取得する場合
dbadmin=> dbadmin=> SELECT ANALYZE_STATISTICS('table1');
ANALYZE_STATISTICS
--------------------
0 ★正常終了
(1 row)例②: table1テーブルの col1,col2,col3 カラムについて、統計情報を50%取得する場合
dbadmin=> SELECT ANALYZE_STATISTICS('table1','col1,col2,col3',50);
ANALYZE_STATISTICS
--------------------
0 ★正常終了
(1 row)注意点
truncate table 実行後の統計情報について
TRUNCATE TABLE 後の統計情報は、Verticaのバージョンによって、保持のされ方が異なります。Vertica9.3 以降では「日次/月次処理でデータの洗い替えをする場合」や「性能検証でデータの入れ直しをする場合」は、テーブルにデータを追加後に、統計情報を再取得してください。再取得しない場合、実行計画は最適なパスが選択されずに、性能劣化が発生するのでご注意ください。
Vertica バージョン | TRUNCATE TABLE後のタイプ | |
|---|---|---|
9.2 以前 | FULL | |
9.3~12.0.2 | NONE | |
12.0.3 以降 | ROWCOUNT | |
各タイプの意味は、以下のとおりです。
FULL | ANALYZE_STATISTICSで取得されたフルに取得された状態 行数以外にデータのサンプル解析、ストレージ使用量などを取得する。 | ||
|---|---|---|---|
ROWCOUNT | 自動的に行数だけ取得された簡易的な状態ANALYZE_STATISTICSで統計情報の取得を推奨 | ||
NONE | 統計情報が取得されていない状態 テーブルを作成後にデータをロードした直後の状態 |
実行例
例: truncate table 実行後の統計情報を取得した結果
########## 9.2 以前 ##########
# 統計情報の状態を確認
dbadmin=> select table_name,statistics_type from projection_columns where table_name = 't1';
table_name | statistics_type
------------+-----------------
t1 | FULL ★統計あり
(1 row)
# truncate table を実行
dbadmin=> truncate table t1;
TRUNCATE TABLE
# 統計情報の状態を確認
dbadmin=> select table_name,statistics_type from projection_columns where table_name = 't1';
table_name | statistics_type
------------+-----------------
t1 | FULL ★統計あり
(1 row)
########## 9.3~12.0.2 ##########
# 統計情報の状態を確認
dbadmin=> select table_name,statistics_type from projection_columns where table_name = 't1';
table_name | statistics_type
------------+-----------------
t1 | FULL ★統計あり
(1 row)
# truncate table を実行
dbadmin=> truncate table t1;
TRUNCATE TABLE
# 統計情報の状態を確認
dbadmin=> select table_name,statistics_type from projection_columns where table_name = 't1';
table_name | statistics_type
------------+-----------------
t1 | NONE ★統計なし
(1 row)
########## 12.0.3 以降 ##########
# 統計情報の状態を確認
dbadmin=> select table_name,statistics_type from projection_columns where table_name = 't1';
table_name | statistics_type
------------+-----------------
t1 | FULL ★統計あり
(1 row)
# truncate table を実行
dbadmin=> truncate table t1;
TRUNCATE TABLE
# 統計情報の状態を確認
dbadmin=> select table_name,statistics_type from projection_columns where table_name = 't1';
table_name | statistics_type
------------+-----------------
t1 | ROWCOUNT ★行数のみ取得
(1 row)読み込むデータ量によるパフォーマンスの影響について
読み込むデータ量を指定(1~100%)して統計情報を取得する場合、より精度の高い統計情報を取得することができます。しかし大量のデータを読み込むことから、パフォーマンスに影響を与える可能性があるため、使用するテーブルや時間帯にご注意ください。
参考情報
ANALYZE_STATISTICS
https://docs.vertica.com/26.1.x/en/sql-reference/functions/performance-analysis-functions/statistics-management-functions/analyze-statistics/
PROJECTION_COLUMNS
https://docs.vertica.com/26.1.x/en/sql-reference/system-tables/v-catalog-schema/projection-columns/
統計情報が取得されたタイムスタンプ
https://www.ashisuto.co.jp/cm/analytics-database/last_update_of_statistics.html
統計情報をコピーする方法
https://www.ashisuto.co.jp/cm/analytics-database/statistics-copy.html
検証バージョンについて
この記事の内容はVertica 26.1で確認しています。
更新履歴
2026/02/26 バージョン26.1用に改訂、
Vertica12.0.3以降のtruncate table実行後の統計情報の挙動を追加
統計情報の取得方法に実行例を追加
2022/02/15 バージョン11.0用に改訂、
全体的に体裁を変更、
統計情報の取得方法に実行例を追加、
注意点に truncate table を追加、
参考情報 に PROJECTION_COLUMNS、統計情報が取得されたタイムスタンプ、
統計情報をコピーする方法 を追加
2018/08/29 バージョン9.2用に改訂
2016/06/19 本記事を公開