Tech・Ed で Azure コミュニティの話もあるので最近は SQL Azure の勉強などをちょくちょくしています。
今日は SQL Azure の統計情報関連で使用できる T-SQL について調べてみました。
以下の技術情報を元にしています。
Transact-SQL Reference (SQL Azure Database)
?
■システム関数
STATS_DATE | テーブルまたはインデックス付きビューの統計の最終更新日を返します。 |
?
■システムストアドプロシージャ
sp_autostats | インデックス、統計オブジェクト、テーブル、またはインデックス付きビューの自動統計更新オプション (AUTO_UPDATE_STATISTICS) を表示または変更します。 |
sp_createstats | CREATE STATISTICS ステートメントを呼び出して、統計オブジェクトの最初の列になっていない列の統計を 1 列ずつ作成します。 |
sp_helpstats | 指定したテーブルの列およびインデックスに関する統計を返します |
sp_statistics | 指定したテーブルまたはインデックス付きビュー上にあるすべてのインデックスおよび統計の一覧を返します。 |
sp_updatestats | 現在のデータベース内にあるすべてのユーザー定義テーブルと内部テーブルに対して UPDATE STATISTICS を実行します。 |
?
■システムビュー
sys.stats | U、V、または TF 型の表形式オブジェクトの統計ごとに 1 行のデータを保持します。 |
sys.stats_columns | sys.stats 統計の一部である列ごとに 1 行のデータを保持します。 |
?
■T-SQL ステートメント
CREATE STATISTICS | テーブルまたはインデックス付きビューの 1 つまたは複数の列で、クエリの最適化に関する統計 (フィルター選択された統計情報を含む) を作成します。 |
DBCC SHOW_STATISTICS | テーブルまたはインデックス付きビューについての、現在のクエリの最適化に関する統計を表示します。 |
DROP STATISTICS | 現在のデータベースの指定されたテーブル内で、複数のコレクションの統計を削除します。 |
?
■データベースプロパティ (DATABASEPROPERTYEX)
IsAutoCreateStatistics | 初期値:1 (TRUE) | クエリのパフォーマンスを向上させるために、クエリ オプティマイザーが必要に応じて 1 列ずつの統計を作成します。 |
IsAutoUpdateStatistics | 初期値:1 (TRUE) | クエリで使用される既存の統計が古くなっている可能性がある場合、クエリ オプティマイザーによって更新されます。 |
?
統計情報関連としてはこれらを利用することが可能となっているようです。
STATS_DATE 関数が使えるので、統計情報が更新されたタイミングがわかるかな~と思ったのですが、SQL Azure では、NULL に
なってしまって更新日がうまく取得できませんでした…。
統計情報の自動更新はデフォルトで有効になっているのですが、データのサイズによっては実データとの乖離が発生する可能性が
ありますので、統計情報がいつ更新されたかが取得できるとデータベース管理者としてはうれしいのですけども。
SQL Azure も SQL Server 2008 R2 とベースは同じですので、最適なクエリの実行プランを選択するためには
統計情報は重要になってくると思いますので必要に応じた定期的な統計情報のメンテナンスは実施する必要があります。
SQL Azure には SQL Server Agent サービスがないので、SQL Azure 以外の機能で定期的にメンテナンスする必要がありますが。
# 開発をやらないのでこの辺のスキルが薄い…。
こういう情報調べるのって楽しいです♪