
運用データベースで毎晩 sp_updatestats を実行していますが、更新後にパフォーマンスの問題が発生する特定のストアド プロシージャを除いて、正常に動作しているようです。
開発チームは現在、このプロセスの修正に取り組んでいます(いくつかの新しいインデックスと、私が推奨したクエリの再編成)が、現在のところ唯一の回避策は、
UPDATE STATISTICS [SuperGiantTable]
WITH FULLSCAN
それで、質問ですが、sp_ updatestatsに「fullscan」オプションを強制的に実行させることはできますか?欲しいそうでない場合は、sp_updatestats の直後に実行される UPDATE STATISTICS コマンドを上に追加します。
ちなみにSQL 2000です。
答え1
KPWINC が言ったように、「それは本当に状況によります」。
質問への回答に影響を与える項目が他にもいくつかあるため、一般的な回答は適切ではない可能性があります。
Microsoft MSDNにはsp_updatestatsのエントリがあります(http://msdn.microsoft.com/en-us/library/aa260337(SQL.80).aspx) および「統計情報の更新」(http://msdn.microsoft.com/en-us/library/aa260645(SQL.80).aspx)
まず最後の質問にお答えします。
SQLServerPedia のエントリを再度読む必要があります。具体的には、次のとおりです。
インデックスの再構築により、インデックスの統計情報が自動的に更新されます (通常は、sp_updatestats を使用した場合よりも優れた 100% のサンプル サイズで)。インデックスの再構築が完了したら、sp_updatestatsを使用して、注意が必要な他の統計を更新できます。 (2005年以降)
UPDATE STATISTICS (2000) のドキュメントを見ると、サンプリングについては次のように書かれています。
注: デフォルトの動作では、ターゲット テーブルまたはインデックス付きビューに対してサンプル スキャンが実行されます。SQL Serverは必要なサンプルサイズを自動的に計算します。
Kimberly Tripp は、統計、インデックス、データベースメンテナンス計画に関するブログ記事をいくつかまとめています (http://www.sqlskills.com/BLOGS/KIMBERLY/category/Statistics.aspx)。その情報は直接使用できるかどうかはわかりませんが、各ブログエントリのガイダンスは使用できるはずであり、参照されているサイトはおそらく役立つでしょう。
答え2
それは本当に状況によります...
データベースはいくつありますか?
データベースの大きさはどれくらいですか?
どれくらい活動していますか?
sp_updatestats (デフォルト) は、デフォルトのサンプリング レートで統計を更新します。resample オプションを使用することもできますが、これは、統計を最後に更新してから自動更新が行われていない場合にのみ機能します (自動更新でもデフォルトのサンプリング レートが使用されます)。
インデックスを再構築すると、フルスキャンで統計が更新され、ほとんどのユーザーはインデックスの再構築後に良好なパフォーマンスを確認します。
自動統計機能をオフにする人はまれです。オンのままにしておくことをお勧めします。
適切な間隔 (各テーブルのデータ変更パターンによって異なります) で実行され、フルスキャンまたはその他の高いサンプリング レートを使用して手動で統計を更新するジョブを用意します。
一般的には次のようになります:
大規模なデータベースの場合 - トランザクション ログを 1 時間ごとにバックアップします。
-- 毎日差分バックアップを実行します。 -- 毎日デフラグを実行します。 -- 毎日統計を更新します。
-- 週に一度インデックスを再作成します。 -- 週に一度完全バックアップします。
多くのことはデータベースとトランザクションに依存します。
答え3
留意すべきもう 1 つの点は、自動的に計算されたサンプル レートにより、生成されたヒストグラムと密度ベクトルが、sproc が操作するデータの偏りを適切に考慮しない可能性があることです。
サンプリングされた統計の更新後とフルスキャンの統計の更新後のストアドプロシージャ間のクエリ プランの違いをご存知ですか?
もう1つ注意すべき点は、インデックスを再構築し、その副作用として更新された同じ統計情報を更新するメンテナンスプランには注意することです。悪いrebuild-updated-stats をそのままにしておけば、統計情報は次のようになります。
ありがとう