はじめに
統計情報はクエリの実行計画を作成するために利用されて、クエリの性能に大きな影響を与えます。本稿では、統計情報を別環境にコピーする方法をご紹介します。例えば、本番環境の統計情報を開発環境にコピーをおこなって、リリース前のアプリケーションをテストする場合に活用できます。統計情報のエクスポートとインポート
統計情報のエクスポート
EXPORT_STATISTICSを実行することで、ANALYZE_STATISTICSによって、取得した統計情報をXMLファイルに出力します。ANALYZE_STATISTICSが一度も実行されていない場合は、XMLファイルに統計情報は出力されません。構文
1 |
EXPORT_STATISTICS('[ファイル名]','[[[データベース.]スキーマ.]テーブル]' [,'カラム[,…]' ) |
オプション
パラメータ | 説明 |
---|---|
ファイル名 | 統計情報が含まれるXMLファイルの出力先を指定します。空の文字列を指定した場合は、XMLファイルは出力されずに画面のみに出力されます。 |
[データベース.]スキーマ | スキーマを指定します。デフォルトはpublicスキーマです。publicスキーマ以外の場合は、スキーマを指定する必要があります。データベースを指定する場合は、現在稼働中のデータベース名を指定します。 |
テーブル | 統計情報をエクスポートするテーブルを指定します。空の文字列を指定した場合、すべてのテーブルの統計情報をエクスポートします。 |
カラム | テーブル内のカラムを指定します。カンマ区切りで、複数のカラムを指定できます。エクスポートする統計情報の範囲は、指定されたカラムのみが対象です。 |
統計情報のインポート
IMPORT_STATISTICSを実行することで、EXPORT_STATISTICSで出力されたXMLファイルをインポートします。既存の統計情報は、上書きされます。構文
1 |
IMPORT_STATISTICS('ファイル名') |
オプション
パラメータ | 説明 |
---|---|
ファイル名 | EXPORT_STATISTICSによって、出力されたXMLファイルのフルパスを指定します。 |
実行例
本番環境の統計情報を開発環境にコピーする実行例をご紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
/* ①本番環境の統計情報を確認します。*/ 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_STATISTICShttps://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
手動で統計情報を取得する方法
http://vertica-tech.ashisuto.co.jp/collect_analyze/
統計情報が取得されたタイムスタンプ
http://vertica-tech.ashisuto.co.jp/last_update_of_statistics/