在執(zhí)行任何查詢時(shí),SQL Server都會(huì)將數(shù)據(jù)讀取到內(nèi)存,數(shù)據(jù)使用之后,不會(huì)立即釋放,而是會(huì)緩存在內(nèi)存Buffer中,當(dāng)再次執(zhí)行相同的查詢時(shí),如果所需數(shù)據(jù)全部緩存在內(nèi)存中,那么SQL Server不會(huì)產(chǎn)生Disk IO操作,立即返回查詢結(jié)果,這是SQL Server的性能優(yōu)化機(jī)制。

一,主要的內(nèi)存消費(fèi)者(Memory Consumer)

1,數(shù)據(jù)緩存(Data Cache)

Data Cache是存儲(chǔ)數(shù)據(jù)頁(Data Page)的緩沖區(qū),當(dāng)SQL Server需要讀取數(shù)據(jù)文件(File)中的數(shù)據(jù)頁(Data Page)時(shí),SQL Server會(huì)把整個(gè)Page都調(diào)入內(nèi)存(內(nèi)存中的一個(gè)Page叫做buffer),Page是數(shù)據(jù)訪問的最小單元。

當(dāng)用戶修改了某個(gè)Page上的數(shù)據(jù)時(shí),SQL Server 會(huì)先在內(nèi)存中修改Buffer,但是不會(huì)立即將這個(gè)數(shù)據(jù)葉寫回硬盤,而是等到CheckPoint或lazy Writer進(jìn)程運(yùn)行時(shí)集中處理。當(dāng)用戶讀取某個(gè)Page后,如果SQL Server沒有內(nèi)存壓力,它不會(huì)在內(nèi)存中刪除這個(gè)Page,因?yàn)閮?nèi)存中的數(shù)據(jù)頁始終存放著數(shù)據(jù)的最新狀態(tài),如果有其他用戶使用這個(gè)Page,SQL Server 不需要從硬盤中讀取一次,節(jié)省語句執(zhí)行的時(shí)間。理想情況是SQL Server將用戶需要訪問的所有數(shù)據(jù)都緩存在內(nèi)存中,SQL Server 永遠(yuǎn)不需要去硬盤讀取數(shù)據(jù),只需要在CheckPoint 或 lazy Write運(yùn)行時(shí)把修改過的頁面寫回硬盤即可

2,查詢計(jì)劃緩存(Query Plan Cache)

存儲(chǔ)查詢語句和存儲(chǔ)過程的執(zhí)行計(jì)劃,以供重用,而不需要重新編譯(Compile),因?yàn)榫幾g查詢語句產(chǎn)生執(zhí)行計(jì)劃是一個(gè)非常耗費(fèi)資源的過程。

二,查看內(nèi)存消耗

在SQL Server中,只有內(nèi)存書記員(Memory Clerk)能夠分配內(nèi)存,Memory Clerk會(huì)記錄已經(jīng)分配內(nèi)存的數(shù)量,任何一個(gè)需要使用內(nèi)存的對(duì)象,必須創(chuàng)建自己的Memory Clerk,并使用該Memory clerk來分配內(nèi)存。

1,查看Memory clerk分配的內(nèi)存量

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn) View Code

對(duì)于內(nèi)存結(jié)點(diǎn)64,只在DAC中使用。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式