統計の自動更新をFalseに設定する理由


10

幅広い買収プロジェクトの一環として、SQL Serverのインスタンスを約20継承しました。私はパフォーマンスを評価している最中であり、メンテナンスプランの実装方法が気に入らない。

毎日のブランケットインデックスの再構築(これを処理できます)と、統計の毎日の手動更新が表示されています。

データベースの約半分は、統計の自動更新= Falseに設定されています。理由は、「パフォーマンスの問題」を減らすことだと言われていること以外は明確ではありません...

私は常にこれをTrueに設定するベストプラクティスを考え、これに取り組みました。この設定がTrueの場合、手動更新は必要ないと感じました。私が間違っている?

誰もがこれをFalseに設定することの利点を説明できますが、代わりに毎日手動で更新することはできますか?

一部のデータベースはトランザクション性が高い(1日あたり数百万の挿入、削除、更新)データベースもあります。その他のデータベースはトランザクション率が低く、一部はすべて読み取り専用です。Auto Update設定がFalseに設定されているのに、韻や理由はありません。宝くじのようです。

回答:


6

あなたは正しいです。また、ほとんどの場合、Auto Update statisticsをtrueに設定する必要があります。統計をいつ更新するかをSQL Serverが決定できるようにして、うまくいくと信じています。これがtrueに設定されている場合、オプティマイザがより良い計画を準備するのに最終的に役立つフィールドでのデータの分布に関する統計が更新されていることを確認します。ここで注意すべき重要な点は、テーブル内のデータの20%が変更されると、統計の自動更新が起動することです。そのため、10万行が更新された場合に10万行のテーブルでステータス更新が発生するとは感じないはずです。

さらに詳しい分析は、Paul Randalのブログ「統計が自動的に更新されるタイミングについて」で行われています。このオプションがtrueに設定されている場合、欠点はありません。はい、このオプションをtrueに設定すると、一部のI / Oアクティビティを確認できます。

ブログから引き出せる重要な結論は

変更の結果として統計が古くなったとしても、変更の完了後に統計が自動的に更新されることはありません。統計は、クエリプランが次に統計を使用するときに自動的に更新されます。

読み取り操作のみのデータベース、または選択操作のみを行ってDML操作がないデータベースの場合、その場合はオプションをfalseに保つことができますが、trueを維持しても害はありません。ほとんどの場合、一定量のアクティビティーを持つデータベースが表示されます。


10

これはコメントには長すぎるので、自動更新統計をオフにする必要がある別のケースについて説明します。大量のOLTPワークロードをサポートするデータベースとミリ秒単位の厳しいクエリパフォーマンスSLAを使用してきました。ほぼすべてのクエリは取るに足らないもので、クエリとインデックスのチューニングの詳細に多くの注意が払われており、一部のテーブルは非常に大きかった。この状況のピーク時に統計を更新することにはあまり価値がなく、統計の自動更新はSLAに違反していました。その結果、メンテナンスは予定されたジョブを介して非ピーク期間中に行われました。

もう1つのオプションは、AUTO_UPDATE_STATISTICSAUTO_UPDATE_STATISTICS_ASYNCデータベースオプションの両方をオンにすることです。これにより、統計を同期的に更新するオーバーヘッドが発生するのではなく、クエリが古い統計に基づいて実行プランを続行できるようになります。これは、サーバーがクエリワークロードとバックグラウンド統計の更新に対応できるサイズになっている限り、OLTPワークロードに特に適しています。


私はauto_update_statsが実際に問題を引き起こす例を考えようとしていましたが、これは素晴らしいものです-素晴らしい回避策のために(可能であれば)2回賛成し、付随する通常の統計の遅延を回避しますクエリ
SqlRyan 2016年

1
より大きなデータベース(VLDB)で、auto_update statsオプションがONになっていて、SQLが就業日の都合の悪い時間にキックオフする状況がありました。私はそれをオフにし、サーバーにテーブルと時期を決定させるのではなく、特定のテーブルと統計の手動更新についてより戦略的である必要がありました。これにより、システムはより予測可能になりましたが、管理コストは高くなります(間違いありません)が、更新タスクの侵入を避けるために発生する必要がありました。典型的なインデックス/統計管理でシステムを「包括的」にすることが目的の場合は、そのままにしておきます。そうでない場合、状況によっては詳細な戦略が必要になる場合があります。
SnapJag 2017

6

一般に、統計の自動更新を有効にしておくと有益です。ただし、他の設定と同様に、オンまたはオフにできる理由があります。

1つは、いくつかのテーブルに多くのチャーンがあり、クエリは正確な統計にそれほど敏感ではないということです。ETLや、大量のデータを変更するが、そこから読み取らないか、あまり読み取らないその他の一括シナリオを考えてみてください。自動統計の更新を有効にして、大量のI / Oがこれまで使用されないより正確な統計を提供するようにすることはあまり意味がありません。

また、1日に複数回データを更新するシナリオがありますが、更新のたびに統計を更新する必要はありません。(たとえば、データのクエリは1日の特定の時間帯に限られます。それでも、データがクエリされない場合でも、統計を何度も更新する必要はありません。)

または、書き込みが多いワークロードがあるだけかもしれません。または、読み取りは一般にフルスキャンであり、統計はそれほど重要ではありません。

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