資源描述:
《淺談SQL_Server_對(duì)于內(nèi)存的管理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、淺談SQLServer對(duì)于內(nèi)存的管理簡(jiǎn)介理解SQLServer對(duì)于內(nèi)存的管理是對(duì)于SQLServer問題處理和性能調(diào)優(yōu)的基木,木篇文章講述SQLServer對(duì)于內(nèi)存管理的內(nèi)存原理。secondarystorage)對(duì)于計(jì)算機(jī)來說,存儲(chǔ)體系是分層級(jí)的。離CPU越近的地方速度愉快,但容量越?。ㄈ鐖D1所示)。比如:傳統(tǒng)的計(jì)算機(jī)存儲(chǔ)體系結(jié)構(gòu)離CPU由近到遠(yuǎn)依次是:CPU內(nèi)的奇存器,-?級(jí)緩存,二級(jí)緩存,內(nèi)存,硬盤。但同時(shí)離CPU越遠(yuǎn)的存儲(chǔ)系統(tǒng)都會(huì)比z前的存儲(chǔ)系統(tǒng)衣一?個(gè)數(shù)量級(jí)。比如硬盤通常要比同吋代的內(nèi)存
2、大一個(gè)數(shù)量級(jí)。CPU寄存器圖1?計(jì)算機(jī)存儲(chǔ)體系因此對(duì)于SQLServer來說,正常的生產(chǎn)系統(tǒng)所配置的內(nèi)心通常不能裝載;所仃數(shù)據(jù),因此會(huì)涉及到二級(jí)心儲(chǔ),也就是磁盤。磁盤作為現(xiàn)代計(jì)算機(jī)系統(tǒng)屮最后的機(jī)械存儲(chǔ)部件,讀取數(shù)據(jù)需要移動(dòng)磁頭(具體關(guān)于磁盤的原理,可以看我之前?寫的一篇文章),并H山于數(shù)據(jù)庫所訪問的數(shù)據(jù)往往是隨機(jī)分布在磁盤的各個(gè)位置,因此如果頻繁的讀取磁盤需要頻繁的移動(dòng)磁頭,這個(gè)性能將會(huì)十分底下。由計(jì)算機(jī)體存儲(chǔ)體系結(jié)構(gòu)可以知道,計(jì)算機(jī)對(duì)丁?所有硬盤內(nèi)數(shù)據(jù)的操作都需要首先讀取到內(nèi)存,因此利用好內(nèi)存的
3、緩沖區(qū)而減少對(duì)磁盤I0的訪問將會(huì)是提升SQLServer性能的關(guān)鍵.這也是本篇文章寫作的出發(fā)點(diǎn)之一。SQLServer引擎,一個(gè)自我調(diào)整的引擎山于SQLServer過去一直面向是屮小型金業(yè)市場(chǎng)的原因,SQLServer存儲(chǔ)引擎被設(shè)計(jì)成一個(gè)不需要太多配置就能使用的產(chǎn)品,從而減少了部署成本,但這也是很多人一直詬病的微軟開放的配登過少。而對(duì)于SQLServer如何使用內(nèi)存,幾乎沒有直接可以配置的空間,僅僅開放的配置只有是否使用AWE,以及實(shí)例占用的最大或最小內(nèi)存,如圖2所示。?fig務(wù)君國(guó)性-CABET
4、SOM-FC-ln
5、x
6、腳本▼E幫助£設(shè)器性庫理全接is級(jí)限處基連數(shù)高權(quán)服務(wù)器內(nèi)存選項(xiàng)啟使用AWE分國(guó)內(nèi)存Of)最小朋務(wù)器內(nèi)存(MB)(M):最大服務(wù)器內(nèi)存(MB)OO:(2147483647其他內(nèi)存選項(xiàng)創(chuàng)建索引占用的內(nèi)存(KB,0=動(dòng)態(tài)內(nèi)存)CL):.服務(wù)器:連接:CAREYS0N-PCCarey5o]售杳看i車挖凰祥1進(jìn)度連接就緒每次查詢占用的最小內(nèi)存CKB)(Q):[1024aSJSfl(c)圖2.SQLServer町控控制內(nèi)存的選項(xiàng)而對(duì)于具體的SQLServer如何使用內(nèi)俗例如分配給執(zhí)行
7、計(jì)劃緩存多少,分配給數(shù)據(jù)buffer多少,這些都無法通過配置進(jìn)行調(diào)控。這也是很多其它技術(shù)的開發(fā)人員對(duì)于使用微軟技術(shù)的開發(fā)人員充滿優(yōu)越感的原因,而在我看來,址然SQLServer握供可控配置的地方很少,但是很多地方都可以在通曉原理的惜況下進(jìn)行“間接”的配置。這也需要了解一些Windows的原理。SQLServer是如何使用內(nèi)存的SQLServer存儲(chǔ)引擎本身是個(gè)Windows下的進(jìn)程,所以SQLServer使用內(nèi)存和其它Windows進(jìn)程一樣,都需耍向Windows申請(qǐng)內(nèi)存。從Windows申請(qǐng)到內(nèi)
8、存之后,SQLServer使用內(nèi)存粗略可以分為兩部分:緩沖池內(nèi)存(數(shù)據(jù)頁和空閑頁),非緩沖內(nèi)存(線程,DLL,鏈接服務(wù)器等)。而緩沖池內(nèi)存占ffiTSQLServer的大部分內(nèi)存使用。緩沖池所占內(nèi)存也就是圖2最人最小內(nèi)存所設(shè)置的,因此sqlservr.exe所占的內(nèi)存有可能會(huì)大丁?圖2中所設(shè)置的最人內(nèi)存。還有一點(diǎn)是,SQLServer使用內(nèi)存的特點(diǎn)是:有多少用多少,并且用了以后不釋放(除非收到Windows內(nèi)存壓力的通知)。比如我所在公司的開發(fā)服務(wù)器,在幾乎沒有負(fù)載的時(shí)候來看內(nèi)存使用,如圖3所示。
9、-Inlx^Tindovs任務(wù)?HS文件g)選項(xiàng)@)查看笙幫ftb?應(yīng)用程序進(jìn)程I性能丨聯(lián)網(wǎng)丨用戶]映像名稱1用尸名CPUI內(nèi)存使用1▲?^sqlservr?execluster0013,119,220K)sqlbrowser?execluster00193,772Kservices.exeSYSTEM00176,664KRepgtingServicesService.execlustek00110,644KRepgtingServicesService.execlust啟00109,724KM
10、sDtsSrvr.exeNETWORKSERVICE0084,768Klsass?exeSYSTEM0070,004Kwmiprvse.exeNETWORKSERVICE0062,140K—msmdsrv.execlust吃0048,512Ksvchost.exeSYSTEM0037,616Ksvchost.exeSYSTEM0028,644KSqlWb.exe*32Adiriini0021,380Kwinlogon.exeSYSTEM0020,828Kinetin£o.exeSY