2019/3/7 15:18:35
經常看見有(yǒu)人(rén)問,MSSQL占用(yòng)了太多的(de)内存,而且還不斷的(de)增長;或者說已經設置了使用(yòng)内存,可(kě)是它沒有(yǒu)用(yòng)到(dào)那麽多,這是怎麽一回事兒呢?
首先,我們來看看MSSQL是怎樣使用(yòng)内存的(de)。最大(dà)的(de)開(kāi)銷一般是用(yòng)于數據緩存,如(rú)果内存足夠,它會(huì)把用(yòng)過的(de)數據和(hé)覺得你(nǐ)會(huì)用(yòng)到(dào)的(de)數據統統扔到(dào)内存中,直到(dào)内存不足的(de)時候,才把命中率低的(de)數據給清掉。所以一般我們在看statistics io的(de)時候,看到(dào)的(de)physics read都(dōu)是0。
其次就是查詢的(de)開(kāi)銷,一般地(dì)說,hash join是會(huì)帶來比較大(dà)的(de)内存開(kāi)銷的(de),而merge join和(hé)nested loop的(de)開(kāi)銷比較小(xiǎo),還有(yǒu)排序和(hé)中間表、遊标也(yě)是會(huì)有(yǒu)比較大(dà)的(de)開(kāi)銷的(de)。所以用(yòng)于關聯和(hé)排序的(de)列上(shàng)一般需要有(yǒu)索引。
再其次就是對執行(xíng)計(jì)劃、系統數據的(de)存儲,這些都(dōu)是比較小(xiǎo)的(de).我們先來看數據緩存對性能(néng)的(de)影響,如(rú)果系統中沒有(yǒu)其它應用(yòng)程序來争奪内存,數據緩存一般是越多越好,甚至有(yǒu)些時候我們會(huì)強行(xíng)把一些數據pin在高(gāo)速緩存中。但(dàn)是如(rú)果有(yǒu)其它應用(yòng)程序,雖然在需要的(de)時候MSSQL會(huì)釋放(fàng)内存,但(dàn)是線程切換、IO等待這些工(gōng)作也(yě)是需要時間的(de),所以就會(huì)造成性能(néng)的(de)降低。這樣我們就必須設置MSSQL的(de)最大(dà)内存使用(yòng)。可(kě)以在SQL Server 屬性(内存選項卡)中找到(dào)配置最大(dà)使用(yòng)内存的(de)地(dì)方,或者也(yě)可(kě)以使用(yòng)sp_configure來完成。如(rú)果沒有(yǒu)其它應用(yòng)程序,那麽就不要限制(zhì)MSSQL對内存的(de)使用(yòng)。
然後來看查詢的(de)開(kāi)銷,這個(gè)開(kāi)銷顯然是越低越好,因爲我們不能(néng)從中得到(dào)好處,相(xiàng)反,使用(yòng)了越多的(de)内存多半意味著(zhe)查詢速度的(de)降低。所以我們一般要避免中間表和(hé)遊标的(de)使用(yòng),在經常作關聯和(hé)排序的(de)列上(shàng)建立索引。
深圳市南山區南山街(jiē)道南海(hǎi)大(dà)道西(xī)桂廟路(lù)北陽光(guāng)華藝大(dà)廈1棟4F、4G-04
咨詢電話(huà):136 8237 6272
大(dà)客戶咨詢:139 0290 5075
業(yè)務QQ:195006118
技術(shù)QQ:179981967