web-dev-qa-db-ja.com

SQL Serverの統計はデータベースまたはバッファープールに格納されますか?

統計はデータベースではなくメモリに保持されているのでしょうか。データベースをprodサーバーから開発サーバーにバックアップ/復元すると、同じ統計が保持されるので、開発サーバーで実行しても実行計画に大きな違いはありませんか?

10
Joy Walker

バッファプールはデータベースのキャッシュです。 「または」が存在することは決してありません。バッファプールにあるものは、常にデータベースにもあります。また、データベースから読み取られたものは、一時的にであっても、バッファープールに存在する必要があります。

質問に関しては:統計はデータベースにあるので、バックアップ/復元は統計を保持します。

ただし、統計の保持は再現性の計画を保証するものではないことに注意してください。 CPUの数やRAMの容量など、他の要因が計画の生成に影響します。

15
Remus Rusanu
9
Kin Shah

Remusによると のように、テーブル統計は、テーブルやインデックスなどの他のオブジェクトと同様にデータベースに保存されます。それらは実行計画の選択に大きな役割を果たしますが、他の要因もあります。

そうは言っても、SQL Serverは別の種類の統計情報を知っています。統計情報は、最近の動作に関する情報を提供します。

たとえば、DMV sys.dm_db_index_usage_statsおよびsys.dm_db_index_operational_statsインデックスの使用方法に関する統計を返します。

これらの統計はメモリにのみ保存されます。サーバーの再起動時に迷子になり、バックアップと一緒に移動しません。

ただし、オプティマイザはこれらを使用して計画を生成することもしません。

3
Sebastian Meine