web-dev-qa-db-ja.com

(ディスクベースの)テーブルは、データが読み取られた後、どの時点でメモリから削除されますか?

(ディスクベースなのでHekatonではない)テーブルは、データを読み取っているクエリの寿命よりも長くメモリに保持されますか?

もしそうなら、何が彼らが記憶に留まる期間を決定しますか?

それらがメモリに保持される期間を管理する方法はありますか?

6
J.D.

これは複雑なトピックであり、その多くは このMicrosoft Docsの記事 で説明されています。

いくつかのポイントに答えるには:

(ディスクベースなのでHekatonではない)テーブルは、データを読み取っているクエリの寿命よりも長くメモリに保持されますか?

ちょっと。テーブル全体がメモリに永続化されるとは限りません。テーブルまたはインデックスからの個々のページはメモリに格納されます-テーブル全体でも、その一部でもかまいません。

もしそうなら、何が彼らが記憶に留まる期間を決定しますか?

私がリンクした記事を参照する必要がありますが、多くのことが「メモリプレッシャー」を引き起こし、データページがキャッシュから「排除」される可能性があります。

SQL Serverで利用可能なメモリの量、その他のデータとインデックスページがメモリにプルされる、メモリを必要とするその他のSQL Serverデータキャッシュ、OSとボックス上のその他のプロセスからの「外部」圧力などのすべての結果として、ページがキャッシュから追い出されました。

SQL Serverは「最も最近使用されていない」キャッシュを使用するため、最も最近参照されていないページが最初にキックアウトされます。

それらがメモリに保持される期間を管理する方法はありますか?

SQL Serverがページをバッファプールに保持するのに十分なメモリを確保し、他のプロセスがSQL Serverに圧力をかけないようにすることによってのみ、.

OSがSQL Serverからメモリを取り戻すのを防ぐことができる1つのことは、メモリ内のページのロック(LPIM)機能をオンにすることです。


歴史的なメモとして、DBCC PINTABLEは、テーブルをメモリに保持するために使用されていましたが、それは SQL Server 2005以降は非推奨 です(現在は何もしていません)。

10
Josh Darnell