OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

統計情報をコピーする方法

公開日:
更新日:
基本操作
#統計情報
#実行計画

はじめに

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

統計情報のエクスポートとインポート

統計情報のエクスポート

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 本記事を公開