解決SQL Server虛擬內(nèi)存不足情況
導(dǎo)讀:SQL Server數(shù)據(jù)庫(kù)中能儲(chǔ)存大量的數(shù)據(jù),這就要求SQL Server數(shù)據(jù)庫(kù)的內(nèi)存足夠大,虛擬內(nèi)存在SQL Server數(shù)據(jù)庫(kù)中也發(fā)揮著很大的作用,那么如果虛擬內(nèi)存不足,大家可以試試下文中為大家介紹的方法,幫助大家解決虛擬內(nèi)存不足的困擾。
癥狀:在具有 2 GB 或更多 RAM 的計(jì)算機(jī)上,除了 256 MB (SQL Server 7.0) 或 384 MB (SQL Server 2000) 虛擬地址空間之外,SQL Server 在啟動(dòng)過(guò)程中保留剩下的所有虛擬地址空間以供緩沖池使用。另外,為了存儲(chǔ)數(shù)據(jù)和過(guò)程緩存,SQL Server 使用緩沖池內(nèi)存為來(lái)自 SQL Server 進(jìn)程的大多數(shù)小于 8 KB 的其他內(nèi)存請(qǐng)求提供服務(wù)。剩下的未保留內(nèi)存準(zhǔn)備用于不能從緩沖池得到服務(wù)的其他分配。這些分配包括、但不限于以下各項(xiàng):
- SQL Server 創(chuàng)建的所有線程的堆棧和關(guān)聯(lián)的線程環(huán)境塊。在 SQL Server 創(chuàng)建了所有 255 個(gè)工作線程之后,這大約為 140 MB。
- 由在 SQL Server 地址空間(根據(jù)具體系統(tǒng)而有所不同)中運(yùn)行的其他 DLL 或進(jìn)程進(jìn)行的分配,如: •任何鏈接的服務(wù)器中的 OLE DB 提供程序。
- 通過(guò)使用 sp_OA 系統(tǒng)存儲(chǔ)過(guò)程或擴(kuò)展存儲(chǔ)過(guò)程加載的 COM 對(duì)象。
- 加載到地址空間中的任何映像(.exe 或 .dll),這些映像通常使用 20 到 25 MB,但是如果您使用鏈接的服務(wù)器、sp_OA 或擴(kuò)展存儲(chǔ)過(guò)程,則這些映像可能使用更多的空間。
- 進(jìn)程堆和 SQL Server 可能創(chuàng)建的任何其他堆。在啟動(dòng)過(guò)程中,此空間通常為 10 MB,但是如果您使用鏈接的服務(wù)器、sp_OA 或擴(kuò)展存儲(chǔ)過(guò)程,則此空間可能更多。
- 來(lái)自 SQL Server 進(jìn)程的大于 8 KB 的分配,例如較大查詢計(jì)劃、網(wǎng)絡(luò)數(shù)據(jù)包大小配置選項(xiàng)接近于 8 KB 時(shí)發(fā)送和接收緩沖區(qū)等情況所需要的分配。要查看此數(shù)字,請(qǐng)查找在 DBCC MEMORYSTATUS 中報(bào)告的 OS Reserved 值,該值是作為 8 KB 頁(yè)的數(shù)目報(bào)告的。通常,該值為 5 MB。
- 跟蹤緩沖池中每個(gè)緩沖區(qū)狀態(tài)信息的數(shù)組。該值通常約為 20 MB,除非 SQL Server 運(yùn)行時(shí)啟用了地址窗口化擴(kuò)展插件 (AWE),在這種情況下,該值將會(huì)顯著提高。
在擁有大量數(shù)據(jù)庫(kù)的系統(tǒng)上,日志格式化所需的 64 KB 分配可能會(huì)占用所有剩余的虛擬內(nèi)存。這之后的分配將失敗,導(dǎo)致本文的“癥狀”一節(jié)中列出的一個(gè)或多個(gè)錯(cuò)誤。
通過(guò)使用 -g 啟動(dòng)參數(shù),您可以指示 SQL Server 保留附加的虛擬內(nèi)存可用,以便這些與日志相關(guān)的分配和其他正常分配加在一起也不會(huì)用完虛擬地址空間。
下表根據(jù)數(shù)據(jù)庫(kù)的數(shù)目和服務(wù)器版本列出 -g 值的一些建議初始值: DatabasesSQL Server 7.0SQL Server 2000
250-g134N/A
500-g185N/A
750-g237N/A
1000-g288-g288
1250-g340-g340
1500-g392-g392
此表是使用列出的典型值進(jìn)行計(jì)算的,并且此計(jì)算是基于沒(méi)有使用鏈接的服務(wù)器活動(dòng)、sp_OA 或擴(kuò)展存儲(chǔ)過(guò)程這一假設(shè)的。它還假設(shè)您沒(méi)有使用 AWE 和 SQL 事件探查器。出現(xiàn)以上任意一種情況都需要您增加 -g 的值。
如果服務(wù)器上數(shù)據(jù)庫(kù)的數(shù)目超過(guò)此數(shù)目,Microsoft 建議您在運(yùn)行該服務(wù)器之前進(jìn)行慎重的考慮,因?yàn)橄到y(tǒng)上具有如此數(shù)目的數(shù)據(jù)庫(kù)所需的系統(tǒng)開(kāi)銷將占用緩沖池中的大量虛擬內(nèi)存,從而可能導(dǎo)致系統(tǒng)整體性能下降。
上文中的方法能夠很輕松的幫助大家解決SQL Server中虛擬內(nèi)存不足的問(wèn)題,虛擬內(nèi)存大了運(yùn)行速度自然就上去了,大家的工作效率也就自然而然的提高了,大家何樂(lè)而不為???
【編輯推薦】
- 僅允許指定的機(jī)器連接SQL Server服務(wù)器
- SQL Server數(shù)據(jù)庫(kù)維度表和事實(shí)表概述
- SQL Server數(shù)據(jù)庫(kù)多種方式查找重復(fù)記錄