iT邦幫忙

0

SQL Server其實很吃記憶體??

我目前有個疑問~

就是MSSQL資料庫在工作管理中佔了快3GB記憶體~

不設定資料庫的記憶體的使用量,他本身就是這麼耗記憶體嗎??

我在裡面只掛一個資料庫,這個資料庫也才250MB左右~

還是他有其他的原因才會造成這麼高的記憶體消耗??

這資料庫主要是用來存一些部落格的文章資料的。

player iT邦大師 1 級 ‧ 2014-07-15 16:46:36 檢舉
SQL Server吃最多記憶體的部分
不是DB
也不是Catch
而是Log
Log檔可能會成長到超過可用記憶體
而導致DB被鎖死 (目前已知SQL Server 6.5 到2008R2都有此問題)
所以
請養成用SQL Agent定期清理Log的好習慣
那個我都定時一個禮拜清一次~

Log的確會慢慢長大~
14
外獅佬
iT邦大師 1 級 ‧ 2014-07-15 10:10:08
最佳解答

SQL Server啟動時會嘗試去取得最大可用的記憶體空間當作cache使用
如愛因斯坦,它會自動調節記憶體使用空間,不致於導致系統檔機。

看更多先前的回應...收起先前的回應...

那cache使用太多了吧驚

外獅佬 iT邦大師 1 級 ‧ 2014-07-15 10:24:19 檢舉

不想給他用那麼多,可以更改『最大伺服器記憶體』設定
它的預設值是....2147483647MB偷笑

哈~我就是沒改這個設定~想看他會佔多少~

想說是資料庫越多才會佔越多~沒想到光一個資料庫就給我佔那麼多..無言

外獅佬 iT邦大師 1 級 ‧ 2014-07-15 10:41:44 檢舉

那是『伺服器』的設定,所有資料庫都會共用該設定值。

瞭解@@~是所有資料庫都會共用

10
easonjuan
iT邦研究生 1 級 ‧ 2014-07-15 10:08:21

是的,mssql 的預設就是你有多少Ram 他就會吃掉多少Ram
不過他會自行調節,所以不用擔心他.

那可真會吃...

2
丁丁 (Dean)
iT邦大師 6 級 ‧ 2014-07-15 10:27:28

通常資料庫主機只會用做資料庫服務, 並將主機的記憶體大部份配置給上面的資料庫服務(Oracle, MS-SQL...), 以換取資料庫較好的效能應用, 我猜樓主可能是有放其他的服務(Web...)所以會覺得用太多?! 老實說商用的, 我是覺得基本標配應該是8G up...
XD

看更多先前的回應...收起先前的回應...

並沒有放其他服務...那台配置i5的CPU然後16GB記憶體~3TB硬碟2顆作磁碟陣列~2個網卡~
Web是另外放~

就是只放MSSQL資料庫專用的電腦@@~

3/16 => 這有吃很大嗎?! @@

一個資料庫3GB~那放6個資料庫~記憶體就吃光了..暈

外獅佬 iT邦大師 1 級 ‧ 2014-07-15 12:42:44 檢舉

不管6個還是60個
都是3G

嗯嗯~~應該是都只在3GB~我另一台MSSQL放6個資料庫~記憶體一直維持1~2GB(因為主機限制他)~

所以我才移出一個資料庫來測試最大記憶體不限制會怎樣~只是沒想到會飆到3GB驚

jer5173提到:
一個資料庫3GB~那放6個資料庫~記憶體就吃光了?!

施主... 這個問題請請教您家的DBA

4
raytracy
iT邦大神 1 級 ‧ 2014-07-15 13:33:55

jer5173提到:
一個資料庫3GB~那放6個資料庫~記憶體就吃光了..

所以, 這句話的意思, 就是說: 你認為, 資料庫應該要被全部載入到記憶體內操作, 才是正常的?

是不是寫軟體的人, 對資料庫伺服器都有這樣的期待, 覺得只要全部放到記憶體, 就可以不用去管效能的事了; 所以通常寫程式的人, 都不願意花時間去做 SQL Query 的最佳化調校?

看更多先前的回應...收起先前的回應...
外獅佬 iT邦大師 1 級 ‧ 2014-07-15 13:38:26 檢舉

雷大神教訓得是....簽名

大神~認為是出在SQL Query 的問題上嗎囧

所以那一個資料庫會達到3GB記憶體的使用量~其實是有問題的嗎?筆記

資料庫應該要被全部載入到記憶體內操作, 才是正常的?
我並不是這麼想的~我是看到資料庫怎麼會耗那麼多~以前放在4GB的機子上~記憶一直維持在1~2GB左右~這次為了4GB的機子多點記憶體空間~才把他移出來~只是沒想到他實際要耗到3GB的量失神

外獅佬 iT邦大師 1 級 ‧ 2014-07-15 13:59:22 檢舉

SQL Server的最大與最小伺服器記憶體使用量
最小伺服器記憶體:當SQL Server啟動時,即向OS領用這麼多記憶體,作為Cache使用,所以正常狀況下工作管理員裡頭看到的SQL Server佔用記憶體,不會小於這個值
最大伺服器記憶體:當原先配置的記憶體不敷使用時,在不超過這個設定值的情況下,會嘗試向OS要到更多記憶體,以作為cache使用。

raytracy iT邦大神 1 級 ‧ 2014-07-15 16:45:19 檢舉

我沒有要教訓人的意思, 只是剛好藉這個例子, 希望寫程式的人都能夠多想想對硬體資源的使用, 是否達到有效的地步?

我曾經看過一個跑報表的程式, 每次執行都會引發 12 次 Full Table Scan, 他的 DB 有 400多 GB, 這樣掃 12 次, 那個報表要等到何時才能見天日?

但是寫那個程式的人, 卻一點也不想改善自己的程式技巧 (其實他只要改幾行 SQL Query 就可以降到2次 Full scan 以下; 我來寫的話, 搞不好一次都不用), 只會一昧地將效能問題推給硬體, 要公司花錢提升硬體來配合他的爛程式? 這種丟到水裡去的錢, 我怎麼能叫公司花得下去?

問題是, 這種人還不少, 窩藏在各公司的角落裡....

外獅佬 iT邦大師 1 級 ‧ 2014-07-15 17:14:56 檢舉

這種程式,屢見不鮮....
經常看到的是....SELECT * FROM xxxx
然後....再用自己寫的程式去抓前5筆資料....落寞
不然就是.....SELECT * FROM yyyy
再一筆筆資料去過濾資料倒

easonjuan iT邦研究生 1 級 ‧ 2014-07-16 09:20:17 檢舉

Select * 真的是很可怕的東西!
還有抓前五筆明明只要加個 top 5 就好了!

以上兩點是以前要同時寫程式與管資料庫後才發現~
與其讓程式來判斷不然讓資料庫來判斷~效能真的強化很多

外獅佬 iT邦大師 1 級 ‧ 2014-07-16 10:31:40 檢舉

以T-SQL來說,就算要使用參數去控制撈前n筆資料
也可以這麼寫SELECT TOP (@n) * FROM xxxx
犯不著透過程式去判斷、篩選。
此外,少用*...只撈需要的欄位就好....

lcw1960 iT邦新手 4 級 ‧ 2014-07-21 10:00:59 檢舉

SQL Query的指令寫得好與不好,在執行效能上有可能差了十倍,或甚至更高,以前資源少的年代,程式比較會要求寫得比較精簡,但後來因為硬體便宜,多數Programmer已經少有這種概念了,大概是此時非彼時吧.

我要發表回答

立即登入回答