はじめに
統計情報はクエリの実行計画を作成するために利用されて、クエリの性能に大きな影響を与えます。本稿では、統計情報を別環境にコピーする方法をご紹介します。例えば、本番環境の統計情報を開発環境にコピーをおこなって、リリース前のアプリケーションをテストする場合に活用できます。

統計情報のエクスポートとインポート
統計情報のエクスポート
EXPORT_STATISTICSを実行することで、ANALYZE_STATISTICSによって、取得した統計情報をXMLファイルに出力します。ANALYZE_STATISTICSが一度も実行されていない場合は、XMLファイルに統計情報は出力されません。
構文
EXPORT_STATISTICS('[ファイル名]','[[[データベース.]スキーマ.]テーブル]' [,'カラム[,…]' )オプション
パラメータ | 説明 |
|---|---|
ファイル名 | 統計情報が含まれるXMLファイルの出力先を指定します。空の文字列を指定した場合は、XMLファイルは出力されずに画面のみに出力されます。 |
[データベース.]スキーマ | スキーマを指定します。デフォルトはpublicスキーマです。publicスキーマ以外の場合は、スキーマを指定する必要があります。データベースを指定する場合は、現在稼働中のデータベース名を指定します。 |
テーブル | 統計情報をエクスポートするテーブルを指定します。空の文字列を指定した場合、すべてのテーブルの統計情報をエクスポートします。 |
カラム | テーブル内のカラムを指定します。カンマ区切りで、複数のカラムを指定できます。エクスポートする統計情報の範囲は、指定されたカラムのみが対象です。 |
統計情報のインポート
IMPORT_STATISTICSを実行することで、EXPORT_STATISTICSで出力されたXMLファイルをインポートします。既存の統計情報は、上書きされます。
構文
IMPORT_STATISTICS('ファイル名')オプション
パラメータ | 説明 |
|---|---|
ファイル名 | EXPORT_STATISTICSによって、出力されたXMLファイルのフルパスを指定します。 |
実行例
本番環境の統計情報を開発環境にコピーする実行例をご紹介します。
/* ①本番環境の統計情報を確認します。*/
dbadmin=> select table_schema,table_name,table_column_name,statistics_type,projection_name,projection_column_name,statistics_updated_timestamp from projection_columns order by projection_name;
table_schema | table_name | table_column_name | statistics_type | projection_name | projection_column_name | statistics_updated_timestamp
--------------+------------+--------------------+-----------------+---------------------------------+------------------------+-------------------------------
ssbm | CUSTOMER | C_PHONE | FULL | CUSTOMER_DBD_1_rep_sp_20201021 | C_PHONE | 2020-10-21 14:46:30.598079+09
ssbm | CUSTOMER | C_REGION | FULL | CUSTOMER_DBD_1_rep_sp_20201021 | C_REGION | 2020-10-21 14:46:30.598079+09
ssbm | CUSTOMER | C_NATION | FULL | CUSTOMER_DBD_1_rep_sp_20201021 | C_NATION | 2020-10-21 14:46:30.598079+09
ssbm | CUSTOMER | C_CITY | FULL | CUSTOMER_DBD_1_rep_sp_20201021 | C_CITY | 2020-10-21 14:46:30.598079+09
ssbm | CUSTOMER | C_ADDRESS | FULL | CUSTOMER_DBD_1_rep_sp_20201021 | C_ADDRESS | 2020-10-21 14:46:30.598079+09
ssbm | CUSTOMER | C_NAME | FULL | CUSTOMER_DBD_1_rep_sp_20201021 | C_NAME | 2020-10-21 14:46:30.598079+09
ssbm | CUSTOMER | C_CUSTKEY | FULL | CUSTOMER_DBD_1_rep_sp_20201021 | C_CUSTKEY | 2020-10-21 14:46:30.598079+09
ssbm | CUSTOMER | C_MKTSEGMENT | FULL | CUSTOMER_DBD_1_rep_sp_20201021 | C_MKTSEGMENT | 2020-10-21 14:46:30.598079+09
ssbm | LINEORDER | LO_ORDERKEY | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_ORDERKEY | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_LINENUMBER | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_LINENUMBER | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_CUSTKEY | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_CUSTKEY | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_PARTKEY | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_PARTKEY | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_SUPPKEY | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_SUPPKEY | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_ORDERDATE | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_ORDERDATE | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_ORDERPRIORITY | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_ORDERPRIORITY | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_SHIPPRIORITY | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_SHIPPRIORITY | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_QUANTITY | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_QUANTITY | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_EXTENDEDPRICE | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_EXTENDEDPRICE | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_ORDERTOTALPRICE | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_ORDERTOTALPRICE | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_DISCOUNT | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_DISCOUNT | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_REVENUE | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_REVENUE | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_SUPPLYCOST | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_SUPPLYCOST | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_TAX | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_TAX | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_COMMIT_DATE | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_COMMIT_DATE | 2020-10-21 14:55:53.946368+09
ssbm | LINEORDER | LO_SHIPMODE | FULL | LINEORDER_DBD_2_rep_sp_20201021 | LO_SHIPMODE | 2020-10-21 14:55:53.946368+09
(25 rows)
★「CUSTOMER」テーブルと「LINEORDER」テーブルは統計情報を取得済みのためすべてカラムが、
「statistics_type=FULL」,「statistics_updated_timestamp=統計情報取得日時」になっていることを確認
/* ②本番環境の統計情報をエクスポートします。*/
dbadmin=> SELECT EXPORT_STATISTICS('/tmp/ssbm_stats.xml','');
EXPORT_STATISTICS
-----------------------------------
Statistics exported successfully
(1 row)
★「Statistics exported successfully」が出力されることを確認
[dbadmin@verty02 tmp]$ ls -l /tmp/ssbm_stats.xml
-rw------- 1 dbadmin verticadba 172757 10月 21 18:24 /tmp/ssbm_stats.xml
★「/tmp/ssbm_stats.xml」が出力されたことを確認
/* ③統計情報を本番環境から開発環境に転送します。*/
[dbadmin@verty03 tmp]$ scp dbadmin@172.16.60.26:/tmp/ssbm_stats.xml .
ssbm_stats.xml 100% 169KB 79.7MB/s 00:00
[dbadmin@verty03 tmp]$ ls -l /tmp/ssbm_stats.xml
-rw------- 1 dbadmin verticadba 172757 10月 21 18:28 /tmp/ssbm_stats.xml
★開発環境に「ssbm_stats.xml」がコピーされたことを確認
「ssbm_stats.xml」は、dbadminユーザーが読取り可能であるか確認
(読取り不可の場合は、IMPORT_STATISTICS実行時にエラーが発生する)
/* ④開発環境の統計情報を確認します。*/
dbadmin=> select table_schema,table_name,table_column_name,statistics_type,projection_name,projection_column_name,statistics_updated_timestamp from projection_columns order by projection_name;
table_schema | table_name | table_column_name | statistics_type | projection_name | projection_column_name | statistics_updated_timestamp
--------------+------------+--------------------+-----------------+-----------------+------------------------+------------------------------
ssbm | CUSTOMER | C_CUSTKEY | NONE | CUSTOMER_super | C_CUSTKEY |
ssbm | CUSTOMER | C_NAME | NONE | CUSTOMER_super | C_NAME |
ssbm | CUSTOMER | C_ADDRESS | NONE | CUSTOMER_super | C_ADDRESS |
ssbm | CUSTOMER | C_CITY | NONE | CUSTOMER_super | C_CITY |
ssbm | CUSTOMER | C_NATION | NONE | CUSTOMER_super | C_NATION |
ssbm | CUSTOMER | C_REGION | NONE | CUSTOMER_super | C_REGION |
ssbm | CUSTOMER | C_PHONE | NONE | CUSTOMER_super | C_PHONE |
ssbm | CUSTOMER | C_MKTSEGMENT | NONE | CUSTOMER_super | C_MKTSEGMENT |
ssbm | LINEORDER | LO_DISCOUNT | NONE | LINEORDER_super | LO_DISCOUNT |
ssbm | LINEORDER | LO_ORDERTOTALPRICE | NONE | LINEORDER_super | LO_ORDERTOTALPRICE |
ssbm | LINEORDER | LO_EXTENDEDPRICE | NONE | LINEORDER_super | LO_EXTENDEDPRICE |
ssbm | LINEORDER | LO_QUANTITY | NONE | LINEORDER_super | LO_QUANTITY |
ssbm | LINEORDER | LO_SHIPPRIORITY | NONE | LINEORDER_super | LO_SHIPPRIORITY |
ssbm | LINEORDER | LO_ORDERDATE | NONE | LINEORDER_super | LO_ORDERDATE |
ssbm | LINEORDER | LO_ORDERKEY | NONE | LINEORDER_super | LO_ORDERKEY |
ssbm | LINEORDER | LO_LINENUMBER | NONE | LINEORDER_super | LO_LINENUMBER |
ssbm | LINEORDER | LO_CUSTKEY | NONE | LINEORDER_super | LO_CUSTKEY |
ssbm | LINEORDER | LO_PARTKEY | NONE | LINEORDER_super | LO_PARTKEY |
ssbm | LINEORDER | LO_SUPPKEY | NONE | LINEORDER_super | LO_SUPPKEY |
ssbm | LINEORDER | LO_ORDERPRIORITY | NONE | LINEORDER_super | LO_ORDERPRIORITY |
ssbm | LINEORDER | LO_REVENUE | NONE | LINEORDER_super | LO_REVENUE |
ssbm | LINEORDER | LO_SUPPLYCOST | NONE | LINEORDER_super | LO_SUPPLYCOST |
ssbm | LINEORDER | LO_TAX | NONE | LINEORDER_super | LO_TAX |
ssbm | LINEORDER | LO_COMMIT_DATE | NONE | LINEORDER_super | LO_COMMIT_DATE |
ssbm | LINEORDER | LO_SHIPMODE | NONE | LINEORDER_super | LO_SHIPMODE |
(25 rows)
★「CUSTOMER」テーブルと「LINEORDER」テーブルは統計情報を一度も取得していないため、
すべてカラムが「statistics_type=NONE」,「statistics_updated_timestamp=空欄」になっていることを確認
/* ⑤本番環境の統計情報を開発環境にインポートします。*/
dbadmin=> SELECT IMPORT_STATISTICS('/tmp/ssbm_stats.xml');
IMPORT_STATISTICS
-------------------------------------------------------------------------------------------------------------
Importing statistics for projection CUSTOMER_super column C_CUSTKEY success
Importing statistics for projection CUSTOMER_super column C_NAME success
Importing statistics for projection CUSTOMER_super column C_ADDRESS success
Importing statistics for projection CUSTOMER_super column C_CITY success
Importing statistics for projection CUSTOMER_super column C_NATION success
Importing statistics for projection CUSTOMER_super column C_REGION success
Importing statistics for projection CUSTOMER_super column C_PHONE success
Importing statistics for projection CUSTOMER_super column C_MKTSEGMENT success
Importing statistics for projection LINEORDER_super column LO_ORDERKEY success
Importing statistics for projection LINEORDER_super column LO_LINENUMBER success
Importing statistics for projection LINEORDER_super column LO_CUSTKEY success
Importing statistics for projection LINEORDER_super column LO_PARTKEY success
Importing statistics for projection LINEORDER_super column LO_SUPPKEY success
Importing statistics for projection LINEORDER_super column LO_ORDERDATE success
Importing statistics for projection LINEORDER_super column LO_ORDERPRIORITY success
Importing statistics for projection LINEORDER_super column LO_SHIPPRIORITY success
Importing statistics for projection LINEORDER_super column LO_QUANTITY success
Importing statistics for projection LINEORDER_super column LO_EXTENDEDPRICE success
Importing statistics for projection LINEORDER_super column LO_ORDERTOTALPRICE success
Importing statistics for projection LINEORDER_super column LO_DISCOUNT success
Importing statistics for projection LINEORDER_super column LO_REVENUE success
Importing statistics for projection LINEORDER_super column LO_SUPPLYCOST success
Importing statistics for projection LINEORDER_super column LO_TAX success
Importing statistics for projection LINEORDER_super column LO_COMMIT_DATE success
Importing statistics for projection LINEORDER_super column LO_SHIPMODE success
(1 row)
★エラーが発生しないことを確認
/* ⑥開発環境の統計情報を確認します。*/
dbadmin=> select table_schema,table_name,table_column_name,statistics_type,projection_name,projection_column_name,statistics_updated_timestamp from projection_columns order by projection_name;
table_schema | table_name | table_column_name | statistics_type | projection_name | projection_column_name | statistics_updated_timestamp
--------------+------------+--------------------+-----------------+-----------------+------------------------+-------------------------------
ssbm | CUSTOMER | C_CUSTKEY | FULL | CUSTOMER_super | C_CUSTKEY | 2020-10-21 18:26:10.517995+09
ssbm | CUSTOMER | C_NAME | FULL | CUSTOMER_super | C_NAME | 2020-10-21 18:26:10.517995+09
ssbm | CUSTOMER | C_ADDRESS | FULL | CUSTOMER_super | C_ADDRESS | 2020-10-21 18:26:10.517995+09
ssbm | CUSTOMER | C_CITY | FULL | CUSTOMER_super | C_CITY | 2020-10-21 18:26:10.517995+09
ssbm | CUSTOMER | C_NATION | FULL | CUSTOMER_super | C_NATION | 2020-10-21 18:26:10.517995+09
ssbm | CUSTOMER | C_REGION | FULL | CUSTOMER_super | C_REGION | 2020-10-21 18:26:10.517995+09
ssbm | CUSTOMER | C_PHONE | FULL | CUSTOMER_super | C_PHONE | 2020-10-21 18:26:10.517995+09
ssbm | CUSTOMER | C_MKTSEGMENT | FULL | CUSTOMER_super | C_MKTSEGMENT | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_DISCOUNT | FULL | LINEORDER_super | LO_DISCOUNT | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_ORDERTOTALPRICE | FULL | LINEORDER_super | LO_ORDERTOTALPRICE | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_EXTENDEDPRICE | FULL | LINEORDER_super | LO_EXTENDEDPRICE | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_QUANTITY | FULL | LINEORDER_super | LO_QUANTITY | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_SHIPPRIORITY | FULL | LINEORDER_super | LO_SHIPPRIORITY | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_ORDERDATE | FULL | LINEORDER_super | LO_ORDERDATE | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_ORDERKEY | FULL | LINEORDER_super | LO_ORDERKEY | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_LINENUMBER | FULL | LINEORDER_super | LO_LINENUMBER | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_CUSTKEY | FULL | LINEORDER_super | LO_CUSTKEY | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_PARTKEY | FULL | LINEORDER_super | LO_PARTKEY | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_SUPPKEY | FULL | LINEORDER_super | LO_SUPPKEY | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_ORDERPRIORITY | FULL | LINEORDER_super | LO_ORDERPRIORITY | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_REVENUE | FULL | LINEORDER_super | LO_REVENUE | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_SUPPLYCOST | FULL | LINEORDER_super | LO_SUPPLYCOST | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_TAX | FULL | LINEORDER_super | LO_TAX | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_COMMIT_DATE | FULL | LINEORDER_super | LO_COMMIT_DATE | 2020-10-21 18:26:10.517995+09
ssbm | LINEORDER | LO_SHIPMODE | FULL | LINEORDER_super | LO_SHIPMODE | 2020-10-21 18:26:10.517995+09
(25 rows)
★「CUSTOMER」テーブルと「LINEORDER」テーブルは、
「statistics_type=FULL」,「statistics_updated_timestamp=統計情報インポート日時」になっていることを確認参考情報
EXPORT_STATISTICS
https://www.vertica.com/docs/10.0.x/HTML/Content/Authoring/SQLReferenceManual/Functions/VerticaFunctions/EXPORT_STATISTICS.htm
IMPORT_STATISTICS
https://www.vertica.com/docs/10.0.x/HTML/Content/Authoring/SQLReferenceManual/Functions/VerticaFunctions/IMPORT_STATISTICS.htm
手動で統計情報を取得する方法
https://www.ashisuto.co.jp/cm/analytics-database/collect_analyze.html
統計情報が取得されたタイムスタンプ
https://www.ashisuto.co.jp/cm/analytics-database/last_update_of_statistics.html
検証バージョンについて
この記事の内容はVertica 10.0で確認しています。
更新履歴
2020/10/22 本記事を公開