解決SQL Server虛擬內(nèi)存不足情況
更新時間:2008年01月11日 21:59:36 作者:
解決SQL Server虛擬內(nèi)存不足情況
解決SQL Server虛擬內(nèi)存不足情況
癥狀
在具有 2 GB 或更多 RAM 的計算機(jī)上,除了 256 MB (SQL Server 7.0) 或 384 MB (SQL Server 2000) 虛擬地址空間之外,SQL Server 在啟動過程中保留剩下的所有虛擬地址空間以供緩沖池使用。另外,為了存儲數(shù)據(jù)和過程緩存,SQL Server 使用緩沖池內(nèi)存為來自 SQL Server 進(jìn)程的大多數(shù)小于 8 KB 的其他內(nèi)存請求提供服務(wù)。剩下的未保留內(nèi)存準(zhǔn)備用于不能從緩沖池得到服務(wù)的其他分配。這些分配包括、但不限于以下各項(xiàng): •SQL Server 創(chuàng)建的所有線程的堆棧和關(guān)聯(lián)的線程環(huán)境塊。在 SQL Server 創(chuàng)建了所有 255 個工作線程之后,這大約為 140 MB。
•由在 SQL Server 地址空間(根據(jù)具體系統(tǒng)而有所不同)中運(yùn)行的其他 DLL 或進(jìn)程進(jìn)行的分配,如: •任何鏈接的服務(wù)器中的 OLE DB 提供程序。
•通過使用 sp_OA 系統(tǒng)存儲過程或擴(kuò)展存儲過程加載的 COM 對象。
•加載到地址空間中的任何映像(.exe 或 .dll),這些映像通常使用 20 到 25 MB,但是如果您使用鏈接的服務(wù)器、sp_OA 或擴(kuò)展存儲過程,則這些映像可能使用更多的空間。
•進(jìn)程堆和 SQL Server 可能創(chuàng)建的任何其他堆。在啟動過程中,此空間通常為 10 MB,但是如果您使用鏈接的服務(wù)器、sp_OA 或擴(kuò)展存儲過程,則此空間可能更多。
•來自 SQL Server 進(jìn)程的大于 8 KB 的分配,例如較大查詢計劃、網(wǎng)絡(luò)數(shù)據(jù)包大小配置選項(xiàng)接近于 8 KB 時發(fā)送和接收緩沖區(qū)等情況所需要的分配。要查看此數(shù)字,請查找在 DBCC MEMORYSTATUS 中報告的 OS Reserved 值,該值是作為 8 KB 頁的數(shù)目報告的。通常,該值為 5 MB。
•跟蹤緩沖池中每個緩沖區(qū)狀態(tài)信息的數(shù)組。該值通常約為 20 MB,除非 SQL Server 運(yùn)行時啟用了地址窗口化擴(kuò)展插件 (AWE),在這種情況下,該值將會顯著提高。
在擁有大量數(shù)據(jù)庫的系統(tǒng)上,日志格式化所需的 64 KB 分配可能會占用所有剩余的虛擬內(nèi)存。這之后的分配將失敗,導(dǎo)致本文的“癥狀”一節(jié)中列出的一個或多個錯誤。
通過使用 -g 啟動參數(shù),您可以指示 SQL Server 保留附加的虛擬內(nèi)存可用,以便這些與日志相關(guān)的分配和其他正常分配加在一起也不會用完虛擬地址空間。
下表根據(jù)數(shù)據(jù)庫的數(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)行計算的,并且此計算是基于沒有使用鏈接的服務(wù)器活動、sp_OA 或擴(kuò)展存儲過程這一假設(shè)的。它還假設(shè)您沒有使用 AWE 和 SQL 事件探查器。出現(xiàn)以上任意一種情況都需要您增加 -g 的值。
如果服務(wù)器上數(shù)據(jù)庫的數(shù)目超過此數(shù)目,Microsoft 建議您在運(yùn)行該服務(wù)器之前進(jìn)行慎重的考慮,因?yàn)橄到y(tǒng)上具有如此數(shù)目的數(shù)據(jù)庫所需的系統(tǒng)開銷將占用緩沖池中的大量虛擬內(nèi)存,從而可能導(dǎo)致系統(tǒng)整體性能下降。
: 打造SQL Server2000的安全策略
癥狀
在具有 2 GB 或更多 RAM 的計算機(jī)上,除了 256 MB (SQL Server 7.0) 或 384 MB (SQL Server 2000) 虛擬地址空間之外,SQL Server 在啟動過程中保留剩下的所有虛擬地址空間以供緩沖池使用。另外,為了存儲數(shù)據(jù)和過程緩存,SQL Server 使用緩沖池內(nèi)存為來自 SQL Server 進(jìn)程的大多數(shù)小于 8 KB 的其他內(nèi)存請求提供服務(wù)。剩下的未保留內(nèi)存準(zhǔn)備用于不能從緩沖池得到服務(wù)的其他分配。這些分配包括、但不限于以下各項(xiàng): •SQL Server 創(chuàng)建的所有線程的堆棧和關(guān)聯(lián)的線程環(huán)境塊。在 SQL Server 創(chuàng)建了所有 255 個工作線程之后,這大約為 140 MB。
•由在 SQL Server 地址空間(根據(jù)具體系統(tǒng)而有所不同)中運(yùn)行的其他 DLL 或進(jìn)程進(jìn)行的分配,如: •任何鏈接的服務(wù)器中的 OLE DB 提供程序。
•通過使用 sp_OA 系統(tǒng)存儲過程或擴(kuò)展存儲過程加載的 COM 對象。
•加載到地址空間中的任何映像(.exe 或 .dll),這些映像通常使用 20 到 25 MB,但是如果您使用鏈接的服務(wù)器、sp_OA 或擴(kuò)展存儲過程,則這些映像可能使用更多的空間。
•進(jìn)程堆和 SQL Server 可能創(chuàng)建的任何其他堆。在啟動過程中,此空間通常為 10 MB,但是如果您使用鏈接的服務(wù)器、sp_OA 或擴(kuò)展存儲過程,則此空間可能更多。
•來自 SQL Server 進(jìn)程的大于 8 KB 的分配,例如較大查詢計劃、網(wǎng)絡(luò)數(shù)據(jù)包大小配置選項(xiàng)接近于 8 KB 時發(fā)送和接收緩沖區(qū)等情況所需要的分配。要查看此數(shù)字,請查找在 DBCC MEMORYSTATUS 中報告的 OS Reserved 值,該值是作為 8 KB 頁的數(shù)目報告的。通常,該值為 5 MB。
•跟蹤緩沖池中每個緩沖區(qū)狀態(tài)信息的數(shù)組。該值通常約為 20 MB,除非 SQL Server 運(yùn)行時啟用了地址窗口化擴(kuò)展插件 (AWE),在這種情況下,該值將會顯著提高。
在擁有大量數(shù)據(jù)庫的系統(tǒng)上,日志格式化所需的 64 KB 分配可能會占用所有剩余的虛擬內(nèi)存。這之后的分配將失敗,導(dǎo)致本文的“癥狀”一節(jié)中列出的一個或多個錯誤。
通過使用 -g 啟動參數(shù),您可以指示 SQL Server 保留附加的虛擬內(nèi)存可用,以便這些與日志相關(guān)的分配和其他正常分配加在一起也不會用完虛擬地址空間。
下表根據(jù)數(shù)據(jù)庫的數(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)行計算的,并且此計算是基于沒有使用鏈接的服務(wù)器活動、sp_OA 或擴(kuò)展存儲過程這一假設(shè)的。它還假設(shè)您沒有使用 AWE 和 SQL 事件探查器。出現(xiàn)以上任意一種情況都需要您增加 -g 的值。
如果服務(wù)器上數(shù)據(jù)庫的數(shù)目超過此數(shù)目,Microsoft 建議您在運(yùn)行該服務(wù)器之前進(jìn)行慎重的考慮,因?yàn)橄到y(tǒng)上具有如此數(shù)目的數(shù)據(jù)庫所需的系統(tǒng)開銷將占用緩沖池中的大量虛擬內(nèi)存,從而可能導(dǎo)致系統(tǒng)整體性能下降。
: 打造SQL Server2000的安全策略
您可能感興趣的文章:
- SQL語句實(shí)現(xiàn)查詢SQL Server內(nèi)存使用狀況
- 優(yōu)化SQL Server的內(nèi)存占用之執(zhí)行緩存
- SQL Server 數(shù)據(jù)頁緩沖區(qū)的內(nèi)存瓶頸分析
- SqlServer如何通過SQL語句獲取處理器(CPU)、內(nèi)存(Memory)、磁盤(Disk)以及操作系統(tǒng)相關(guān)信息
- SQL Server 2008 R2占用cpu、內(nèi)存越來越大的兩種解決方法
- 揭秘SQL Server 2014有哪些新特性(1)-內(nèi)存數(shù)據(jù)庫
- 淺談SQL Server 對于內(nèi)存的管理[圖文]
- SQL Server內(nèi)存遭遇操作系統(tǒng)進(jìn)程壓榨案例分析
- SQL Server在AlwaysOn中使用內(nèi)存表的“踩坑”記錄
- sql server學(xué)習(xí)基礎(chǔ)之內(nèi)存初探
相關(guān)文章
SQL Server實(shí)現(xiàn)用觸發(fā)器捕獲DML操作的會話信息【實(shí)例】
下面小編就為大家?guī)硪黄猄QL Server實(shí)現(xiàn)用觸發(fā)器捕獲DML操作的會話信息【實(shí)例】。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03Sqlserver timestamp數(shù)據(jù)類使用介紹
SQL Server timestamp 數(shù)據(jù)類型與時間和日期無關(guān)。SQL Server timestamp 是二進(jìn)制數(shù)字,它表明數(shù)據(jù)庫中數(shù)據(jù)修改發(fā)生的相對順序。2011-08-08SQL實(shí)現(xiàn)遞歸及存儲過程中In()參數(shù)傳遞解決方案詳解
這篇文章詳細(xì)介紹了SQL實(shí)現(xiàn)遞歸及存儲過程中In()參數(shù)傳遞解決方案,有需要的朋友可以參考一下2013-09-09詳解DB2 sqlstate 57016 SQLCODE=-668 原因碼 "7"錯誤的快速解決辦法
db2 sqlstate 57016,db2 57016 原因碼7錯誤怎么解決呢?下面小編給大家?guī)砹薉B2 sqlstate 57016 SQLCODE=-668 原因碼 "7"錯誤的快速解決辦法,一起看下吧2016-08-08