記事
· 2024年3月24日 2m read

テーブル統計情報をエクスポートして別環境にインポートする方法

これは InterSystems FAQ サイトの記事です。

クエリパフォーマンスを左右するクエリプランは、テーブルチューニングを行った結果の統計情報を元に生成されます。

ある環境で期待したプランになったけれど、他の環境では意図したプランにならない場合、(期待したプランとなる)既存環境からテーブル統計情報をエクスポートして別の環境にインポートし、同じ統計情報をもとにしたクエリプランで実行することができます。
 


既存環境からテーブル統計情報をエクスポートして、対象環境にインポートする方法

新規環境にてテーブルチューニングをしても思うようなパフォーマンスが出ない場合に、パフォーマンスの出ていたテスト環境と、もう一つの別の環境で同じクエリプランでの実行を試してみたい場合があるかと思います。
そんな時は、テーブル統計情報である選択性(Selectivity)とデータ数(ExtentSize)情報等をエクスポートして、対象環境にインポートする方法が使用できます。
もちろん、データの偏りによってクエリオプティマイザが適切だと判断して作成したプランが最適だと考えられますが、どうしても思うようなパフォーマンスが出ない場合に、原因調査も含めてこちらの方法をお試しください。

以下のように統計情報をエクスポート/インポートすることで、同じテーブル統計情報=同じクエリプラン で実行することが可能となります。

/// Export のサンプル
// 現在のネームスペース内のすべての schemas/tables のテーブル統計情報をエクスポート
Do $SYSTEM.SQL.Stats.Table.Export("C:\temp\AllStats.xml")

// 現在のネームスペースの SQLUser パッケージ (SQLUser.* テーブル) 統計情報をエクスポート
Do $SYSTEM.SQL.Stats.Table.Export("C:\temp\SQLUserStats.xml","SQLUser")

// 現在のネームスペースの SQLUser.P* で始まるすべてのテーブル統計情報をエクスポート
Do $SYSTEM.SQL.Stats.Table.Export("C:\temp\SQLUserPStats.xml","SQLUser","P*")

// 現在のネームスペースの SQLUser.Person テーブル統計情報をエクスポート
Do $SYSTEM.SQL.Stats.Table.Export("C:\temp\SQLUserPersonStats.xml","SQLUser","Person")


/// インポートのサンプル
// エクスポートされたXMLファイルをインポート
Do $SYSTEM.SQL.Stats.Table.Import("C:\temp\AllStats.xml")

【注意】エクスポートとインポートは同一バージョンで行うようにしてください。


enlightened【ご参考】
クエリパフォーマンスが出ない場合の対処方法(凍結プランが関係している場合)

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください