1. sql Server佔用內存過高,什麼原因導致的,用什麼方法可以解決
經常使用MSSQL的朋友都會發現一個小小的網站在運行若干天後MSSQL就會把伺服器上所有的內存都吃光,此時你不得不重新啟動一下伺服器或mssql來釋放內存,有人認為是 MSSQL有內存泄露問題,其實不然,微軟給我們了明確說明:在您啟動SQL Server 之後,SQL Server內存使用量將會持續穩定上升,即使當伺服器上活動很少時也不會下降。另外,任務管理器和性能監視器將顯示計算機上可用的物理內存穩定下降,直到可用內存降到 4 至 10 MB 為止。
僅僅出現這種狀態不表示內存泄漏。此行為是正常的,並且是 SQL Server 緩沖池的預期行為。
默認情況下,SQL Server 根據操作系統報告的物理內存載入動態增大和收縮其緩沖池(緩存)的大小。只要有足夠的內存可用於防止內存頁面交換(在 4 至 10 MB 之間),SQL Server緩沖池就會繼續增大。像在與SQL Server 分配內存位於相同計算機上的其他進程一樣,SQL Server 緩沖區管理器將在需要的時候釋放內存。SQL Server每秒可以釋放和獲取幾兆位元組的內存,從而使它可以快速適應內存分配變化。
更多信息
您可以通過伺服器內存最小值和伺服器內存最大值配置選項設置 SQL Server資料庫引擎使用的內存(緩沖池)量的上下限。在設置伺服器內存最小值和伺服器內存最大值選項之前,請查閱以下 Microsoft 知識庫文章中標題為'內存'一節中的參考信息:319942 HOW TO:Determine Proper sql server(WINDOWS平台上強大的資料庫平台) Configuration Settings(確定正確的 sql server(WINDOWS平台上強大的資料庫平台) 配置設置)
請注意,伺服器內存最大值選項只限制 SQL Server 緩沖池的大小。伺服器內存最大值選項不限制剩餘的未保留內存區域,sql server(WINDOWS平台上強大的資料庫平台) 准備將該區域分配給其他組件,例如擴展存儲過程、COM 對象、以及非共享 DLL、EXE 和 MAPI 組件。由於前面的分配SQL Server專用位元組超過伺服器內存最大值配置是很正常的。有關此未保留內存區域中分配的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:316749 PRB:在使用大量資料庫時可能沒有足夠的虛擬內存
下面我們就來實戰如何限制MSSQL內存使用:
第一步:打開企業管理器雙擊進入要修改的MSSQL.
第二步:在左側MSSQL上點擊右鍵,選擇屬性,彈出SQL Server屬性(配置)對話框(最好打上SQL SP4補丁)
第三步:點擊內存選項卡. 在這里,你會看到MSSQL默認設置為使用最大內存,也就是你所有的內存,根據你的需要,設置它的最大值(一般為物理內存-128M)和最小值(一般為最大內存的1/4)吧.
第五步:設置完畢,重啟MSSQL服務,配置即可生效!
2. sql server 2000最大高速緩存是多少
默認是 1.6G
如果操作系統是企業版 的, SQL SERVER 是企業版或者是DATA CENTER 就可以支持大內存,需要開啟SQL SERVER的AWE選項
AWE選項允許SQL SERVER使用 大內存。
配置操作系統支持AWE
要使OS支持AWE,必須在boot.ini 中加入 /pae 參數
鎖定內存頁:要使用AWE,啟動SQLServer服務的帳號必須有內存中鎖定頁Lock Page in Memory的許可權
此策略將確定哪些帳戶可以使用進程將數據保留在物理內存中,從而阻止系統將數據分頁到磁碟的虛擬內存中。
在 SQL Server 2005 中,「鎖定內存頁」選項默認設置為 OFF。如果您具有系統管理員許可權,
則可以使用組策略工具 (gpedit.msc) 手動啟用該選項,並將此許可權指定給正在運行 SQL Server 的帳戶。
開啟SQL SERVER的AWE選項.gpedit.msc->計算機配置->WINDOWS設置->安全設置->
本地策略->用戶許可權分配->內存中鎖定頁面->加入SQL SERVER的啟動帳戶
雖然沒有要求,但我們建議在使用 64 位操作系統時鎖定內存中的頁。
對於 32 位操作系統,在將 AWE 配置為用於 SQL Server 之前,必須授予「鎖定內存頁」許可權。
/*開啟SQL SERVER的AWE,並設置最大內存為5G
sp_configure "show advanced options", 1
RECONFIGURE WITH OVERRIDE
GO
sp_configure "awe enabled", 1
RECONFIGURE WITH OVERRIDE
GO
sp_configure "max server memory", 5120
RECONFIGURE WITH OVERRIDE
GO
*/
設置最大內存要參照系統物理內存,留下一下內存以供其它應用程序使用(如系統是8G內存,SQL可設置為5G)。設置好後重啟伺服器即可。
3. 如何釋放Sqlserver所佔用的內存
sql server 在查詢大數據量的數據時,總會佔用大量的內存,並且居高不下,一不小心就會死機。
下面這個是我從網上找到的:
當你查詢數據的數據量比較大時,sqlserver會把查詢結果緩存在內存中,保證你下次查詢同樣的記錄時會很快得到結果,所以內存使用量會激增。
在你完成此次查詢後,sqlserver不會馬上釋放內存,數據會仍然放在內存中,這是sqlserver的優化策略,sqlserver會不斷地佔用你的系統內存,來加快sqlserver的運行速度,當你的系統中的其它服務也需要內存時,它才會自動釋放部分內存。一句話,sqlserver不會讓你的系統有閑置的內存,除非你設置sqlserver的最大內存使用量。這樣也沒什麼不好,如果你的系統很大,單獨給sqlserver一台機器,這樣會提高它的性能。
如果你只是開發用,要想讓sqlserver釋放內存,重啟sqlserver的服務就行了。如果不想讓sqlserver佔用太多內存,設置sqlserver的最大內存佔用量.
設置最大內存後效果好了不少!
4. 如何解決SQLServer占內存過多的問題
我們需要准備的材料分別是:電腦。
1、在我的電腦中,搜索訪問sql佔用內存,在右側的管理伺服器中選擇重新啟動,重啟一下IIS。
5. sql配置緩存大小原因
數據緩存和執行緩存的控制。
SQLServer佔用的內存主要由三部分組成:數據緩存(DataBuffer)、執行緩存(ProcereCache)、以及SQLServer引擎程序。SQLServer引擎程序所佔用緩存一般相對變化不大,則我們進行內存調優的主要著眼點在數據緩存和執行緩存的控制上。
SQL語句在執行前首先將被編譯並通過查詢優化引擎進行優化,從而得到優化後的執行計劃,然後按照執行計劃被執行。對於整體相似、僅僅是參數不同的SQL語句,SQLServer可以重用執行計劃。但對於不同的SQL語句,SQLServer並不能重復使用以前的執行計劃,而是需要重新編譯出一個新的執行計劃。同時,SQLServer在內存足夠使用的情況下,此時並不主動清除以前保存的查詢計劃。這樣,不同的SQL語句執行方式,就將會大大影響SQLServer中存儲的查詢計劃數目。如果限定了SQLServer最大可用內存,則過多無用的執行計劃佔用,將導致SQLServer可用內存減少,從而在執行查詢時尤其是大的查詢時與磁碟發生更多的內存頁交換。如果沒有限定最大可用內存,則SQLServer由於可用內存減少,從而會佔用更多內存。
6. sqlserver佔用內存過高,清理辦法
SQL Server對伺服器內存的使用策略是用多少內存就佔用多少內存,只用在伺服器內存不足時,才會釋放一點佔用的內存,所以SQL Server 伺服器內存往往會佔用很高。
Sql Server運行時候的緩存:
1.數據緩存:執行個查詢語句,Sql Server會將相關的數據頁(Sql Server操作的數據都是以頁為單位的)載入到內存中來, 下一次如果再次請求此頁的數據的時候,就無需讀取磁碟了,大大提高了速度。
2.執行命令緩存:在執行存儲過程,自定函數時,Sql Server需要先二進制編譯再運行,編譯後的結果也會緩存起來, 再次調用時就無需再次編譯。
清除緩存的命令(直接執行第四個命令清除所有緩存):
DBCC FREEPROCCACHE --清除存儲過程相關的緩存
DBCC FREESESSIONCACHE --會話緩存
DBCC FREESYSTEMCACHE('All') --系統緩存
DBCC DROPCLEANBUFFERS --所有緩存
注意:清除了緩存,不會釋放SQL Server所佔用的內存,所以需要通過修改SQL Server內存或重啟SQL Server伺服器來釋放內存。
修改SQL Server內存:
優化:使用以下語句查找出什麼語句占內存最高,針對占內存高的語句進行優化
SELECT SS.SUM_EXECUTION_COUNT,
T.TEXT,
SS.SUM_TOTAL_ELAPSED_TIME AS '總和時間',
SS.SUM_TOTAL_WORKER_TIME AS '執行耗時',
SS.SUM_TOTAL_LOGICAL_READS AS '總和邏輯讀數',
SS.SUM_TOTAL_LOGICAL_WRITES AS '總和邏輯寫'
FROM (SELECT S.PLAN_HANDLE,
SUM(S.EXECUTION_COUNT)SUM_EXECUTION_COUNT,
SUM(S.TOTAL_ELAPSED_TIME)SUM_TOTAL_ELAPSED_TIME,
SUM(S.TOTAL_WORKER_TIME)SUM_TOTAL_WORKER_TIME,
SUM(S.TOTAL_LOGICAL_READS)SUM_TOTAL_LOGICAL_READS,
SUM(S.TOTAL_LOGICAL_WRITES)SUM_TOTAL_LOGICAL_WRITES
FROM SYS.DM_EXEC_QUERY_STATS S
GROUP BY S.PLAN_HANDLE
) AS SS
CROSS APPLY SYS.dm_exec_sql_text(SS.PLAN_HANDLE)T
ORDER BY SUM_TOTAL_LOGICAL_READS DESC
轉自: https://www.cnblogs.com/LuoEast/p/8398406.html