統計を更新するタイミング


42

以下を行うメンテナンスプランを継承しました。

  • 古いデータをクリーンアップする
  • DBの整合性をチェックします
  • データベースとトランザクションログのバックアップを実行します
  • インデックスを再編成します
  • 統計の更新
  • 古いバックアップとメンテナンスプランファイルを削除する

23分間のメンテナンスプランのうち、統計の更新には13分間という驚異的な時間がかかります。この13分間、データベースへのアクセスはブロックされます(または、少なくとも、このDBから他のデータベースへのレプリケーションは一時停止されます)。

私の質問は:

統計をいつ更新する必要がありますか?

これは、毎日よりも頻繁に行うべきではないように思えます。私は、不必要なメンテナンスを行うという「理由」の考え方から抜け出そうとしています。


2
行が挿入/更新/削除される頻度/方法 私にとってこれが決定的な要因です。
JNK

@JNK DB全体に1日あたり最大70,000行を挿入します。月に最大100行を更新します。
オニオンナイト

1-これは、TABLEによって行数がわかっている場合により関連性が高く、2-割合として重要です。1メートルのテーブルに一日あたり70Kの行は、500メートルのテーブルに比べて多くの異なる
JNK

私のようないくつかのことを使用することをお勧めしますola.hallengren.com/...のみ再構築/再編成と更新あなたのmaintinance計画がかかり、また、ログ領域の穴のたくさん保存時間をshortentheかもしれない、このように必要なもの..このソリューションを
ピーター・

回答:


28

メンテナンスウィンドウがない場合、毎日統計を更新するのは少しやり過ぎです。 特に、データベースで統計の自動更新がオンになっている場合。元の投稿で、このメンテナンスプランによるパフォーマンスの低下がユーザーに見られると述べました。このメンテナンスプランを実行する他の時間はありませんか?他のウィンドウはありませんか?インデックスを再構築するのはいつですか?その操作が発生すると、統計が自動的に更新されます(インデックスに対してオフになっていない場合)。

統計を更新する頻度は、インデックスとデータが受け取るデータの変更量に大きく依存します。(非常に小さな変更がある場合はINSERTUPDATEDELETE)データには、あなたは統計の更新ジョブのためのよりまれなスケジュールを持つことができます。

統計が古くなっているかどうかを確認する1つの方法は、実行計画を調べて、返された実際の行と行が大幅に異なると推定された場合、間隔を増やす必要があることを示す適切な方法です。あなたの場合、あなたは反対の方向に進んでおり、あなたのために少し試用することができます。統計を毎週更新します。古い統計のはっきりした兆候が見え始めたら、そこから進みます。

データベースで統計の自動更新を使用している場合、統計が更新されるときのしきい値については、このリファレンス参照してください。


インデックスは週に1回再構築されます。
オニオンナイト

5
@ Onion-Knight次に、インデックスを再構築するときに週に1回統計を更新しています。データベース全体で包括的なインデックスの再構築を行っている場合は、これで十分です。
トーマスストリンガー

25

統計を更新するタイミング

統計の自動更新機能が要件に対して十分でない場合にのみ。統計の自動作成と自動更新がオンになっていて、統計が正確または最新ではないために悪いクエリプランを取得している場合、統計の作成と更新を制御することをお勧めします。ただし、SQLサーバーのパフォーマンスとクエリの実行時間に問題がない場合。

次に、メンテナンスプランからUpdates Statisticsコマンドを停止することをお勧めします

統計の更新は重要で便利 です。1。SQL Serverクエリオプティマイザーが適切なクエリプランを一貫して作成できるようにします。開発と管理のコストを低く抑えます。最終的なクエリ結果。3.優れた統計により、オプティマイザーはさまざまなクエリプランのコストを正確に評価し、高品質のプランを選択できます。


統計を手動で更新する場合は、統計が自動的に更新されるタイミングを最初に知っておく必要があります

SQL Serverクエリオプティマイザーが、統計が最後に作成または更新されてから実質的な更新アクティビティを受けたテーブルの特定の列の統計が必要な場合、SQL Serverは列の値をサンプリングして統計を自動更新します(統計の自動更新を使用) 。統計の自動更新は、クエリの最適化またはコンパイルされたプランの実行によってトリガーされ、クエリで参照される列のサブセットのみが関与します。AUTO_UPDATE_STATISTCS_ASYNCがOFFの場合、クエリのコンパイル前に統計が更新されます

SQLサーバーで統計の更新がトリガーされるタイミングについて説明する素晴らしい記事があります

  1. シンプルトークセクション13から。統計の自動更新はいつトリガーされますか?
  2. support.microsoftセクション:Autostats決定の自動化
  3. msdn.microsoftセクション:SQL Server 2008での統計の管理

統計がトリガーされるタイミングを知った後、統計を手動で更新するタイミングを決定するのに役立ちます

統計の詳細とパフォーマンスへの影響を知るには、sqlskillsの非常に優れたブログとブロガーでBrentOzarKimberlyをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.