国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

幫助中心 >  技術(shù)知識庫 >  數據庫 >  相關(guān)技術(shù)支持 >  關(guān)于MSSQL占用過(guò)多內存的問(wèn)題

關(guān)于MSSQL占用過(guò)多內存的問(wèn)題

2009-12-11 14:05:33 9298



經(jīng)??匆?jiàn)有人問(wèn),MSSQL占用了太多的內存,而且還不斷的增長(cháng);或者說(shuō)已經(jīng)設置了使用內存,可是它沒(méi)有用到那么多,這是怎么一回事兒呢?
首先,我們來(lái)看看MSSQL是怎樣使用內存的。最大的開(kāi)銷(xiāo)一般是用于數據緩存,如果內存足夠,它會(huì )把用過(guò)的數據和覺(jué)得你會(huì )用到的數據統統扔到內存中,直到內存不足的時(shí)候,才把命中率低的數據給清掉。所以一般我們在看statistics io的時(shí)候,看到的physics read都是0。

其次就是查詢(xún)的開(kāi)銷(xiāo),一般地說(shuō),hash join是會(huì )帶來(lái)比較大的內存開(kāi)銷(xiāo)的,而merge join和nested loop的開(kāi)銷(xiāo)比較小,還有排序和中間表、游標也是會(huì )有比較大的開(kāi)銷(xiāo)的。所以用于關(guān)聯(lián)和排序的列上一般需要有索引。

再其次就是對執行計劃、系統數據的存儲,這些都是比較小的.我們先來(lái)看數據緩存對性能的影響,如果系統中沒(méi)有其它應用程序來(lái)爭奪內存,數據緩存一般是越多越好,甚至有些時(shí)候我們會(huì )強行把一些數據pin在高速緩存中。但是如果有其它應用程序,雖然在需要的時(shí)候MSSQL會(huì )釋放內存,但是線(xiàn)程切換、IO等待這些工作也是需要時(shí)間的,所以就會(huì )造成性能的降低。這樣我們就必須設置MSSQL的最大內存使用??梢栽赟QL Server 屬性(內存選項卡)中找到配置最大使用內存的地方,或者也可以使用sp_configure來(lái)完成。如果沒(méi)有其它應用程序,那么就不要限制MSSQL對內存的使用。

然后來(lái)看查詢(xún)的開(kāi)銷(xiāo),這個(gè)開(kāi)銷(xiāo)顯然是越低越好,因為我們不能從中得到好處,相反,使用了越多的內存多半意味著(zhù)查詢(xún)速度的降低。所以我們一般要避免中間表和游標的使用,在經(jīng)常作關(guān)聯(lián)和排序的列上建立索引。

提交成功!非常感謝您的反饋,我們會(huì )繼續努力做到更好!

這條文檔是否有幫助解決問(wèn)題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問(wèn)題:
-->