次のことを行うメンテナンスプランを継承しました。
- 古いデータをクリーンアップする
- DBの整合性をチェックします
- データベースとトランザクションログのバックアップを実行します
- インデックスを再編成します
- 統計を更新します
- 古いバックアップとメンテナンスプランファイルを削除します
23分のメンテナンスプランのうち、統計の更新には驚異的な13分かかります。この13分の期間中、データベースへのアクセスはブロックされます(または、少なくともこのDBから他のDBへのレプリケーション)。
私の質問は次のとおりです:
いつすべきか統計の更新とその理由
これは、私たちが毎日よりも頻繁に行うべきではないようなことのようです。私は、不必要なことをするという「理由だけで」の考え方から私たちを解放しようとしています。メンテナンス。
コメント
- 行が挿入/更新/削除される頻度/方法は?私にとって、これが決定的な要因です。
- @JNKDB全体で1日あたり最大70,000行を挿入します。月に最大100行を更新します。
- 1-これは、TABLEで行数がわかっていて、2-パーセンテージでわかっている場合に、より適切です。 1mのテーブルへの1日あたり70k行は、500mのテーブルとは大きく異なります
- ola.hallengren.comのようなものを使用することをお勧めします/ … このソリューションは、必要なものを再構築/再編成および更新するだけです。これにより、メンテナンスプランにかかる時間を短縮し、ログスペースを大幅に節約できます。
回答
メンテナンスウィンドウがない場合、統計を毎日更新するのはおそらく少しやり過ぎです。特にデータベースの自動更新統計をオンにしている場合。元の投稿で、このメンテナンスプランが原因で、ユーザーにパフォーマンスの低下が見られるとおっしゃっていました。このメンテナンスを実行する時間は他にありません。プラン?他のウィンドウはありませんか?プランにはインデックスの再編成が含まれているようですが、インデックスを再構築するのはいつですか?その操作が発生すると、統計が自動的に更新されます(ただし、でオフになっていない場合) dex)。
統計を更新する正確な頻度は、インデックスとデータが受信するデータ変更の量に大きく依存します。データにほとんど変更がない場合(INSERT
、UPDATE
、DELETE
)、その場合、統計の更新ジョブのスケジュールがより頻繁にならない可能性があります。
統計が古くなっているかどうかを確認する1つの方法は、実行プランを調べて、推定行が実際に返された行と大きく異なるかどうかを確認することです。これは、間隔を増やす必要があることを示す良い兆候です。あなたの場合、あなたは「逆の方向に進んでいて、少し試してみる必要があるかもしれません。統計を毎週更新し、古い統計の明らかな兆候が見え始めたら、そこから進んでください。」 p>
データベースに自動更新統計を使用している場合、統計が更新されるときのしきい値については、このリファレンスを参照してください。
コメント
- インデックスを週に1回再構築します。
- @ Onion-Knight次に、インデックスを再構築するときに、統計も週に1回更新します。 。 'データベース全体で包括的インデックスの再構築を行う場合はこれで十分です。
回答
統計を更新するタイミング
の場合のみ自動更新統計機能は要件に対して十分ではありません。つまり、自動作成と自動更新の統計がオンになっていて、統計が正確または最新ではないためにクエリプランが不適切な場合は、統計の作成と更新を制御することをお勧めします。ただし、SQLサーバーのパフォーマンスとクエリの実行時間に問題がない場合は。
次に、統計の更新<を停止することをお勧めします。 メンテナンスプランからの/ div>コマンド
統計の更新は重要で便利です 1. SQL Serverクエリオプティマイザーが開発と管理のコストを低く抑えながら、優れたクエリプランを一貫して作成できるようにします2.統計はクエリオプティマイザーによって使用されます式の選択性、つまり中間および最終クエリ結果のサイズを推定します。 3.3。優れた統計により、オプティマイザはさまざまなクエリプランのコストを正確に評価し、高品質のプランを選択できます。
統計を手動で更新する場合は、最初に統計が自動的に更新される場合
SQL Serverクエリオプティマイザが、大幅に更新されたテーブルの特定の列の統計を必要とする場合統計が最後に作成または更新されてからのアクティビティでは、SQL Serverは列の値をサンプリングすることによって(自動更新統計を使用して)統計を自動的に更新します。統計の自動更新は、クエリの最適化またはコンパイルされたプランの実行によってトリガーされ、クエリで参照されている列のサブセットのみが含まれます。 AUTO_UPDATE_STATISTCS_ASYNCがオフの場合、統計はクエリのコンパイル前に更新されます
SQLサーバーで更新統計がトリガーされるタイミングについて説明する優れた記事があります
- 簡単な話からセクション13.統計の自動更新はいつトリガーされますか?
- support.microsoft セクション:自動統計決定の自動化
- msdn.microsoft セクション:SQL Server2008での統計の保守
統計がいつトリガーされるかを知った後、統計を手動で更新するタイミングを決定するのに役立ちます
統計について詳しく知るために&パフォーマンスへの影響
BrentOzar と Kimberly in sqlskills 非常に優れたブログ&ブロガー。