Sql-Server
從記憶體中讀取數據後,何時從記憶體中刪除(基於磁碟的)表?
(基於磁碟的,所以沒有 Hekaton)表在記憶體中的持續時間是否超過了從它們讀取數據的查詢的生命週期?
如果是這樣,是什麼決定了它們在記憶中的停留時間?
有沒有辦法管理它們在記憶體中的持續時間?
這是一個複雜的主題,此 Microsoft Docs 文章中介紹了其中的大部分內容。
回答幾點:
(基於磁碟的,所以沒有 Hekaton)表在記憶體中的持續時間是否超過了從它們讀取數據的查詢的生命週期?
有點。整個表不一定保存在記憶體中。表或索引中的各個頁面儲存在記憶體中 - 它可能是整個表,也可能只是其中的一部分。
如果是這樣,是什麼決定了它們在記憶中的停留時間?
您必須參考我連結到的文章,但是很多事情都會導致“記憶體壓力”,這將導致數據頁面被從記憶體中“逐出”。
SQL Server 可用的記憶體量、其他數據和索引頁被拉入記憶體、其他需要記憶體的 SQL Server 數據記憶體、來自作業系統和機器上其他程序的“外部”壓力等都可能導致頁面被踢出記憶體。
SQL Server 使用“最近最少使用”記憶體,因此最近最少引用的頁面通常會首先被踢出。
有沒有辦法管理它們在記憶體中的持續時間?
只有確保 SQL Server 有足夠的記憶體將頁面保存在緩衝池中,並確保其他程序不會對 SQL Server 施加壓力。
可以幫助防止作業系統從 SQL Server 取回記憶體的一件事是打開記憶體中的鎖定頁 (LPIM) 功能。
作為歷史記錄,
DBCC PINTABLE
它曾經用於將表保存在記憶體中,但是,它在SQL Server 2005 中已被棄用(現在根本不做任何事情)。