① 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
② sqlserver 資料庫優化。
優化Microsoft SQL Server資料庫內存配置
內存是影響Microsoft SQL Server系統性能的一個重要因素,SQL Server資料庫安裝
時將為具有32MB物理內存的機器預設配置16MB可用內存,16MB物理內存的機器預設配置4MB可
用內存。應在Microsoft SQL Server資料庫安裝後進行內存選項(Memory)設置,最大配置值為
為了確定SQL Server系統最適宜的內存需求,可以從總的物理內存中減去Windows
NT4.0需要的內存以及其它一些內存需求後綜合確定,理想的情況是給SQL Server分配盡可能
1?根據物理內存合理規劃SQL Server可用內存
在大多數的生產環境中,伺服器配備的物理內存是64MB~128MB,偶爾也有256MB的,
只要配置恰當是完全可以滿足SQL Server的內存需求的。下表是筆者關於SQL Server內存分配
物理內存 分配給SQL Server 設置值(單位:2KB)
8MB 4MB 2048
16MB 8MB 4096
32MB 16~18MB 8192~9216
48MB 28~34MB 14336~17408
64MB 40~46MB 20480~23552
128MB 100~108MB 51200~55296
256MB 216~226MB 110592~115712
512MB 464~472MB 237568~241664
以下是SQL Server內存選項(Memory)設置方法
(1)從Microsoft SQL Server程序集中啟動SQL Enterprise Manager;
(2)從Server Manager窗口中選擇「Server」菜單選項;
(3)在「Server」菜單中選擇「Configurations」選項;
(4)在「Server Configuration」對話框中選擇」Configuration」標簽,
(5)選中「Memory」項目,在「Current」欄填入新值;
(6)停止並重新啟動SQLServer服務,使設置生效。
2?合理擴充虛擬內存、增大SQL Server可用內存
當SQL Server系統確實需要擴大可用內存時,應在磁碟空間充足的情況下擴充供虛擬
內存,並相應增大 SQL Server可用內存。具體做法是,系統管理員首先擴充伺服器的虛擬內
存,然後再參考上表增大SQL Server可用內存,關鍵是要根據系統的負載情況綜合決定是否擴
3?使用tempinRAM
SQL Server使用tempdb臨時資料庫作為一些查詢連接操作時排序或創建臨時表的工作
空間。將tempdb創建在RAM中可以使系統操作性能有較大提高,而且因為tempdb在每次重啟動
伺服器時都重建,這樣即使有非正常的關閉也是較為安全的,例如停電故障。要將tempdb創建
在RAM中,可以使用sp_configure進行設置,具體用法請參閱有關資料。
由於tempdbinRAM使用的內存是由系統從內存體單獨分配的,與SQL Server的內存選
項設置的可用內存池是分開的,使用tempdbin RAM將減少整個系統的可用內存,應根據SQL
Server和伺服器運行情況進行配置,否則就可能適得其反,影響系統性能。另外,適當增加
tempdb資料庫空間,即使不使用tempdbin RAM,也可以提高資料庫的運行速度。
4?注意事項
(1)建議在生產環境中SQL Server不要設置小於32MB內存,而且資料庫伺服器上盡量
(2)擴充供虛擬內存、增大SQL Server可用內存,應考慮物理內存使用狀況和磁碟空
(3)在可能的情況下,要為系統留有部分額外的內存,這樣在伺服器上打開一個服務
或添加一個進程且不改變SQL Server內存配置時,不致於使NT伺服器的運行速度受到影響(變
得很慢),一般認為最小為2MB最大為20MB。
請採納答案,支持我一下。
③ 揭秘SQL Server 2014有哪些新特性
1、內存資料庫
在傳統的資料庫表中,由於磁碟的物理結構限制,表和索引的結構為B-Tree,這就使得該類索引在大並發的OLTP環境中顯得非常乏力,雖然有很多辦法來解決這類問題,比如說樂觀並發控制,應用程序緩存,分布式等。但成本依然會略高。而隨著這些年硬體的發展,現在伺服器擁有幾百G內存並不罕見,此外由於NUMA架構的成熟,也消除了多CPU訪問內存的瓶頸問題,因此內存資料庫得以出現。
內存的學名叫做RandomAccess Memory(RAM),因此如其特性一樣,是隨機訪問的,因此對於內存,對應的數據結構也會是Hash-Index,而並發的隔離方式也對應的變成了MVCC,因此內存資料庫可以在同樣的硬體資源下,Handle更多的並發和請求,並且不會被鎖阻塞,而SQLServer 2014集成了這個強大的功能,並不像Oracle的TimesTen需要額外付費,因此結合SSDAS Buffer Pool特性,所產生的效果將會非常值得期待。
SQLServer內存資料庫的表現形式
在SQL Server的Hekaton引擎由兩部分組成:內存優化表和本地編譯存儲過程。雖然Hekaton集成進了關系資料庫引擎,但訪問他們的方法對於客戶端是透明的,這也意味著從客戶端應用程序的角度來看,並不會知道Hekaton引擎的存在。如圖1所示。
圖8.內存優化表+本地編譯存儲過程
因此不難看出,內存優化表+本地編譯存儲過程有接近幾十倍的性能提升。
④ 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服務,配置即可生效!
⑤ 如何解決SQLServer占內存過多的問題
我們需要准備的材料分別是:電腦。
1、在我的電腦中,搜索訪問sql佔用內存,在右側的管理伺服器中選擇重新啟動,重啟一下IIS。
⑥ 如何對sqlserver進行簡單的優化
SQL Server資料庫查詢速度慢的原因有很多,常見的有以下幾種:
1、沒有索引或者沒有用到索引(這是查詢慢最常見的問題,是資料庫設計的缺陷)
2、I/O吞吐量小,形成了瓶頸效應。
3、沒有創建計算列導致查詢不優化。
4、內存不足
5、網路速度慢
6、查詢出的數據量過大(可以採用多次查詢,其他的方法降低數據量)
7、鎖或者死鎖(這也是查詢慢最常見的問題,是程序設計的缺陷)
8、sp_lock,sp_who,活動的用戶查看,原因是讀寫競爭資源。
9、返回了不必要的行和列
10、查詢語句不好,沒有優化
●可以通過以下方法來優化查詢 :
1、把數據、日誌、索引放到不同的I/O設備上,增加讀取速度,以前可以將Tempdb應放在RAID0上,SQL2000不在支持。數據量(尺寸)越大,提高I/O越重要。
2、縱向、橫向分割表,減少表的尺寸(sp_spaceuse)
3、升級硬體
4、根據查詢條件,建立索引,優化索引、優化訪問方式,限制結果集的數據量。注意填充因子要適當(最好是使用默認值0)。索引應該盡量小,使用位元組數小的列建索引好(參照索引的創建),不要對有限的幾個值的欄位建單一索引如性別欄位。
⑦ 如何優化ms server 2008 r2 的內存釋放
SQL Server 2008 或者R2的默認內存分配是2147483647MB, 差不多算是無窮大,對於系統內存的管理策略是有多少佔多少。SQLserver會把所有處理過的SQL操作緩存在內存里,這樣就不用總去讀硬碟了。但是如果長時間運行SQL Server, 系統內存被用的差不多,再開啟其他程序就有可能會報內存不足。這時候就需要釋放內存緩存啦。一般我用以下兩種辦法:
很簡單,打開SQL Server configuration Manager,然後把SQL Server(MSSQLSERVER)重啟一下,一般默認的instance 就是MSSQLServer,當然你如果裝了其他的instance(實例)就選擇相應的,例如MSSQLServer(SQLServLatin1), MSSQLServer(ARABIC)。
這種方法最簡單有效,但是只能臨時的清除SQLServer緩存所佔的內存空間,時間長了SQLServer還會把內存占滿。而且很重要的是這種方法不能在SQLserver有連接的情況下使用,那樣會讓正在使用SQLServer的用戶暫時無法連接SQLServer,甚至導致程序處錯誤。而你作為管理員就……
第二種方法比較復雜,我也不是SQLServer高手,只是從網上學習得來的一些query:
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE('All')
DBCC DROPCLEANBUFFERS
以上一段一般能釋放緩存,(注意引號有的時候因為word文檔里打不出英文的引號,最好拷到記事本里編輯一下)但是有的時候不是很管用。因為SQLserver不會因為Cache(緩存)釋放了而釋放內存,佔了茅坑不一定XX。此命令只會讓SQLServer不會繼續佔領新的內存,定期執行一下還可以。關鍵是還要釋放一下內存。
通過以下Query 可以看出當前伺服器所佔內存情況
SELECT * FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Target Server Memory (KB)','Total Server Memory (KB)')
Target Server Memory(KB)和 Total Server Memory(KB)字面意思所得就是目標和當前SQL Server所佔的內存大小。
EXEC sp_configure 'show advanced options', 1
GO
EXEC sp_configure 'max server memory', 256
EXEC ('RECONFIGURE' )
WAITFOR DELAY '00:00:05'
EXEC sp_configure 'max server memory', 2147483647
EXEC ('RECONFIGURE' )
GO
EXEC sp_configure 'show advanced options', 0
GO
其實我用這幾句也不是很奏效,時間一長還是可能會有內存不夠的情況。
******
總的來說我的管理辦法是:
裝好了SQLServer之後立刻設置最大使用內存
EXEC sp_configure 'show advanced options', 1 -- 這句是打開advanced options
GO
EXEC sp_configure 'max server memory', 9216 -- 設置最大內存為9G,我們server 內存是16G的,留下7G足夠了
EXEC ('RECONFIGURE' )
GO
EXEC sp_configure 'show advanced options', 0 --記得用完了把advanced options關掉
GO
過一段時間覺得不行了就執行一下
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE('All')
DBCC DROPCLEANBUFFERS
這個清緩存也很頭疼,不知道什麼時候合適,就這樣吧,管他呢,我又不是專家,出了問題大不了來機器不行。或者寫個Procere,用job定期執行。
沒辦法,SQLServer太霸道了,以上方法不是萬全之策,建議還是把SQLServer放到一邊單獨用吧。
⑧ sqlserver 內存優化表 是把所有數據放在內存嗎
一個內存優化表可以是持久的或非持久的。 (1)對於一個持久表是將數據存儲在內存中,而且也保存在內存優化文件組中。 (2)對於一個非持久表,數據是僅存儲在內存中的,所以,如果系統崩潰或重啟,數據就會丟失。
⑨ 如何釋放Sqlserver所佔用的內存
sql server 在查詢大數據量的數據時,總會佔用大量的內存,並且居高不下,一不小心就會死機。
下面這個是我從網上找到的:
當你查詢數據的數據量比較大時,sqlserver會把查詢結果緩存在內存中,保證你下次查詢同樣的記錄時會很快得到結果,所以內存使用量會激增。
在你完成此次查詢後,sqlserver不會馬上釋放內存,數據會仍然放在內存中,這是sqlserver的優化策略,sqlserver會不斷地佔用你的系統內存,來加快sqlserver的運行速度,當你的系統中的其它服務也需要內存時,它才會自動釋放部分內存。一句話,sqlserver不會讓你的系統有閑置的內存,除非你設置sqlserver的最大內存使用量。這樣也沒什麼不好,如果你的系統很大,單獨給sqlserver一台機器,這樣會提高它的性能。
如果你只是開發用,要想讓sqlserver釋放內存,重啟sqlserver的服務就行了。如果不想讓sqlserver佔用太多內存,設置sqlserver的最大內存佔用量.
設置最大內存後效果好了不少!