在執(zhí)行任何查詢時,SQL Server都會將數據讀取到內存,數據使用之后,不會立即釋放,而是會緩存在內存Buffer中,當再次執(zhí)行相同的查詢時,如果所需數據全部緩存在內存中,那么SQL Server不會產生Disk IO操作,立即返回查詢結果,這是SQL Server的性能優(yōu)化機制。
一,主要的內存消費者(Memory Consumer)
1,數據緩存(Data Cache)
Data Cache是存儲數據頁(Data Page)的緩沖區(qū),當SQL Server需要讀取數據文件(File)中的數據頁(Data Page)時,SQL Server會把整個Page都調入內存(內存中的一個Page叫做buffer),Page是數據訪問的最小單元。
當用戶修改了某個Page上的數據時,SQL Server 會先在內存中修改Buffer,但是不會立即將這個數據葉寫回硬盤,而是等到CheckPoint或lazy Writer進程運行時集中處理。當用戶讀取某個Page后,如果SQL Server沒有內存壓力,它不會在內存中刪除這個Page,因為內存中的數據頁始終存放著數據的最新狀態(tài),如果有其他用戶使用這個Page,SQL Server 不需要從硬盤中讀取一次,節(jié)省語句執(zhí)行的時間。理想情況是SQL Server將用戶需要訪問的所有數據都緩存在內存中,SQL Server 永遠不需要去硬盤讀取數據,只需要在CheckPoint 或 lazy Write運行時把修改過的頁面寫回硬盤即可
2,查詢計劃緩存(Query Plan Cache)
存儲查詢語句和存儲過程的執(zhí)行計劃,以供重用,而不需要重新編譯(Compile),因為編譯查詢語句產生執(zhí)行計劃是一個非常耗費資源的過程。
二,查看內存消耗
在SQL Server中,只有內存書記員(Memory Clerk)能夠分配內存,Memory Clerk會記錄已經分配內存的數量,任何一個需要使用內存的對象,必須創(chuàng)建自己的Memory Clerk,并使用該Memory clerk來分配內存。
1,查看Memory clerk分配的內存量
View Code
對于內存結點64,只在DAC中使用。
延伸閱讀
學習是年輕人改變自己的最好方式