2005年10月05日

統計情報 (ヒストグラム)

クエリオプティマイザが最適な判断を行うためのデータ分布情報
クエリオプティマイザは統計情報を使用してクエリに対してインデックスを使用する場合のコストを予測
パフォーマンスに影響を及ぼす
     → 統計情報が古いとパフォーマンス低下
           → [推定実行プラン]で警告表示
列値のサンプリングと分布に関する情報を格納:検索条件に該当するデータが何件あるか
データの変更に伴い統計情報の更新が必要
作成された統計情報は sysindexes システムテーブルの statblob 列に格納
○ 統計の作成
自動作成 (既定)
  インデックス作成時にインデックス列内の値の分布情報を自動的に作成
  結合述語または WHERE 句で使用されるインデックスが作成されていない列
    クエリオプティマイザの判断材料として必要な場合はインデックスがない列に対しても自動作成
    自動作成された統計グループの名前は「_WA_Sys_...」となる
手動作成
  CREATE STATISTICS 統計グループ名 ON {テーブル名|ビュー名} (列名 )
    与えられた1つの列/列グループに対して統計情報を作成
   
FULLSCAN オプション 統計情報収集のためにテーブルの全行を読み取り
SAMPLE オプション 統計情報収集のためにテーブルの一部行を無作為抽出
→ 行数または割合で指定
  sp_createstats
    カレントデータベース内の全ユーザーテーブル中で条件を満たす全列に統計情報を1列ずつ作成
auto create statistics オプションで設定
sp_autostats システムストアドプロシージャで対象テーブルの統計情報を表示

○ 統計の保守
自動更新 (既定)
  変更した行数が「500 + 0.2 * 全行数」を超えると自動更新
  sp_autostats で設定変更
手動更新 ← パフォーマンス低下時等
 
UPDATE STATISTICS {テーブル名|ビュー名} テーブル/ビュー個別の更新
sp_updatestats データベース内の全テーブルの更新
auto update statistics オプションで設定
  インデックス作成時の CREATE INDEX ステートメントで NORECOMPUTE オプション指定で統計自動更新無効化
統計情報の更新にはオーバーヘッド発生
SQL Server 6.5 では手動更新 → 更新しないと最適な実行プランが選択されない
データ更新が過剰な場合に統計の自動更新が負荷になるケースがある
【参照】 マイクロソフト 技術情報 195565
        … 6 〜 500 件処理時には 500 回変更ごとに更新
            500 件以上処理時には 500 + テーブルの 20% 変更ごとに更新
posted by w@ko at 18:25|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。