web-dev-qa-db-ja.com

バッファプールをディスクにダンプして、再起動後にロードできるようにします

再起動後にロードできるようにバッファープールキャッシュを保持する方法はありますか?私の調査では、他のDBサーバーでもこれが可能であることが示唆されていますが、SQL Serverはその1つではありません。メンテナンスの再起動後にサーバーのパフォーマンスを最大化する方法を探しています。

5
Mark Henry

いいえ、バッファプールを復元する方法はありません。一部のユーザーは、すべてのテーブルからすべての行を選択して事前入力することを提案しますが、システムがすべてのテーブルからすべての行を使用することはまれです(そのようなアクションが認識されることを実行しない他の理由の中で)行う)。

これがやるべきことであることは、概念的に意味があるかどうかさえわかりません。ここで実際の利益は何ですか?これらのデータページをディスクからメモリに読み込むのにかかる時間を節約できますか?バッファープール内のページがファイルに保存され、起動時に再読み込みされる場合でも、別のファイルからのみ、それらのデータページをバッファープールに読み込むのに同じ(またはほぼ同じ)時間がかかります。または、アプリケーションページのinitial応答時間に、データページをロードする必要があったことを反映したくない場合は、システムがページをロードするのにどのくらい時間がかかりますか?特定の結果セットのためにさらに1秒待機している1人の人(その後、それらのページは後続のクエリのためにメモリ内にありますよね?)はほとんど気付かれません。しかし、これがWebベースのアプリケーションである場合、遅延はDBの障害であり、アプリサーバーまたはクライアントコンピューターとアプリサーバー間のルートの一部の障害ではないと言えるでしょうか。

データページの初期読み込み時間について心配する必要はありません。初期読み込み時間を改善するための領域は、より優れたデータモデリングとインデックス構造にあります(つまり、ディスクからのページの読み取りが可能な限り効率的であることを確認します)。代わりに、データがロードされたら、repeatedリクエストのパフォーマンスが低下する領域について心配してください。

さらに、バッファプールにあったすべてのページが必要だと誰が言っているのですか?キャッシュに残っているアドホックサポートクエリのうち最近6か月ほど再度確認されない可能性があるものはいくつありますか?再起動後にユーザーがシステムにアクセスし始めたときに読み込まれるページは必ずそこにあるべきページになるため、SQL Serverにキャッシュの管理を任せるだけです。

また、SQL Serverは必要に応じていつでもキャッシュからページを削除できるため(他のアイテムにさらに多くのメモリが必要と思われる場合)、しばらくしてから削除される一連のページをロードする可能性があります。

8
Solomon Rutzky