亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

優化SQL Server的內存占用之執行緩存

2024-08-31 00:57:40
字體:
來源:轉載
供稿:網友
首先說明一下SQL Server內存占用由哪幾部分組成。SQL Server占用的內存主要由三部分組成:數據緩存(Data Buffer)、執行緩存(Procedure Cache)、以及SQL Server引擎程序。SQL Server引擎程序所占用緩存一般相對變化不大,則我們進行內存調優的主要著眼點在數據緩存和執行緩存的控制上。本文主要介紹一下執行緩存的調優。數據緩存的調優將在另外的文章中介紹。

對于減少執行緩存的占用,主要可以通過使用參數化查詢減少內存占用。
1、使用參數化查詢減少執行緩存占用
我們通過如下例子來說明一下使用參數化查詢對緩存占用的影響。為方便試驗,我們使用了一臺沒有其它負載的SQL Server進行如下實驗。
下面的腳本循環執行一個簡單的查詢,共執行10000次。

首先,我們清空一下SQL Server已經占用的緩存:
dbcc freeproccache

然后,執行腳本:

復制代碼 代碼如下:


DECLARE @t datetime
SET @t = getdate()
SET NOCOUNT ON
DECLARE @i INT, @count INT, @sql nvarchar(4000)

SET @i = 20000
WHILE @i <= 30000
BEGIN
SET @sql = 'SELECT @count=count(*) FROM P_Order WHERE MobileNo = ' + cast( @i as varchar(10) )
EXEC sp_executesql @sql ,N'@count INT OUTPUT', @count OUTPUT
SET @i = @i + 1
END
PRINT DATEDIFF( second, @t, current_timestamp )


輸出:
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。
11

使用了11秒完成10000次查詢。
我們看一下SQL Server緩存中所占用的查詢計劃:
Select Count(*) CNT,sum(size_in_bytes) TotalSize
From sys.dm_exec_cached_plans

查詢結果:共有2628條執行計劃緩存在SQL Server中。它們所占用的緩存達到:
92172288字節 = 90012KB = 87 MB。

我們也可以使用dbcc memorystatus 命令來檢查SQL Server的執行緩存和數據緩存占用。
執行結果如下:

優化SQL Server的內存占用之執行緩存

 

優化SQL Server的內存占用之執行緩存

 

執行緩存占用了90088KB,有2629個查詢計劃在緩存里,有1489頁空閑內存(每頁8KB)可以被數據緩存和其他請求所使用。

我們現在修改一下前面的腳本,然后重新執行一下dbcc freeproccache。再執行一遍修改后的腳本:

復制代碼 代碼如下:


DECLARE @t datetime
SET @t = getdate()
SET NOCOUNT ON
DECLARE @i INT, @count INT, @sql nvarchar(4000)

SET @i = 20000
WHILE @i <= 30000
BEGIN
SET @sql = 'select @count=count(*) FROM P_Order WHERE MobileNo = @i'
EXEC sp_executesql @sql, N'@count int output, @i int', @count OUTPUT, @i
SET @i = @i + 1
END
PRINT DATEDIFF( second, @t, current_timestamp )


輸出:
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。
1
即這次只用1秒鐘即完成了10000次查詢。
我們再看一下sys.dm_exec_cached_plans中的查詢計劃:
Select Count(*) CNT,sum(size_in_bytes) TotalSize From sys.dm_exec_cached_plans

查詢結果:共有4條執行計劃被緩存。它們共占用內存: 172032字節 = 168KB。
如果執行dbcc memorystatus,則得到結果:

優化SQL Server的內存占用之執行緩存

優化SQL Server的內存占用之執行緩存

 

有12875頁空閑內存(每頁8KB)可以被數據緩存所使用。

到這里,我們已經看到了一個反差相當明顯的結果。在現實中,這個例子中的前者,正是經常被使用的一種執行SQL腳本的方式(例如:在程序中通過合并字符串方式拼成一條SQL語句,然后通過ADO.NET或者ADO方式傳入SQL Server執行)。

解釋一下原因:
我們知道,SQL語句在執行前首先將被編譯并通過查詢優化引擎進行優化,從而得到優化后的執行計劃,然后按照執行計劃被執行。對于整體相似、僅僅是參數不同的SQL語句,SQL Server可以重用執行計劃。但對于不同的SQL語句,SQL Server并不能重復使用以前的執行計劃,而是需要重新編譯出一個新的執行計劃。同時,SQL Server在內存足夠使用的情況下,此時并不主動清除以前保存的查詢計劃(注:對于長時間不再使用的查詢計劃,SQL Server也會定期清理)。這樣,不同的SQL語句執行方式,就將會大大影響SQL Server中存儲的查詢計劃數目。如果限定了SQL Server最大可用內存,則過多無用的執行計劃占用,將導致SQL Server可用內存減少,從而在執行查詢時尤其是大的查詢時與磁盤發生更多的內存頁交換。如果沒有限定最大可用內存,則SQL Server由于可用內存減少,從而會占用更多內存。

對此,我們一般可以通過兩種方式實現參數化查詢:一是盡可能使用存儲過程執行SQL語句(這在現實中已經成為SQL Server DBA的一條原則),二是使用sp_executesql 方式執行單個SQL語句(注意不要像上面的第一個例子那樣使用sp_executesql)。

在現實的同一個軟件系統中,大量的負載類型往往是類似的,所區別的也只是每次傳入的具體參數值的不同。所以使用參數化查詢是必要和可能的。另外,通過這個例子我們也看到,由于使用了參數化查詢,不僅僅是優化了SQL Server內存占用,而且由于能夠重復使用前面被編譯的執行計劃,使后面的執行不需要再次編譯,最終執行10000次查詢總共只使用了1秒鐘時間。

2、檢查并分析SQL Server執行緩存中的執行計劃
通過上面的介紹,我們可以看到SQL緩存所占用的內存大小。也知道了SQL Server執行緩存中的內容主要是各種SQL語句的執行計劃。則要對緩存進行優化,就可以通過具體分析緩存中的執行計劃,看看哪些是有用的、哪些是無用的執行計劃來分析和定位問題。

通過查詢DMV: sys.dm_exec_cached_plans,可以了解數據庫中的緩存情況,包括被使用的次數、緩存類型、占用的內存大小等。
SELECT usecounts, cacheobjtype, objtype,size_in_bytes, plan_handle
FROM sys.dm_exec_cached_plans

優化SQL Server的內存占用之執行緩存

 

通過緩存計劃的plan_handle可以查詢到該執行計劃詳細信息,包括所對應的SQL語句:

SELECT  TOP 100 usecounts,

    objtype,

    p.size_in_bytes,

    [sql].[text]

FROM sys.dm_exec_cached_plans p

OUTER APPLY sys.dm_exec_sql_text (p.plan_handle) sql

ORDER BY usecounts

 

優化SQL Server的內存占用之執行緩存

我們可以選擇針對那些執行計劃占用較大內存、而被重用次數較少的SQL語句進行重點分析。看其調用方式是否合理。另外,也可以對執行計劃被重復使用次數較多的SQL語句進行分析,看其執行計劃是否已經經過優化。進一步,通過對查詢計劃的分析,還可以根據需要找到系統中最占用IO、CPU時間、執行次數最多的一些SQL語句,然后進行相應的調優分析。篇幅所限,這里不對此進行過多介紹。讀者可以查閱聯機叢書中的:sys.dm_exec_query_plan內容得到相關幫助。

附:

1:關于DBCC MEMORY,可以查看微軟的知識庫:

2:關于sys.dm_exec_cached_planssys.dm_exec_sql_text,請參閱聯機叢書。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女成人图区| 日韩免费在线播放| 丝袜一区二区三区| 国产一区二区三区视频在线观看| 中文国产亚洲喷潮| 一区二区中文字幕| 免费91在线视频| 欧美日韩免费在线| 精品无码久久久久久国产| 久久中国妇女中文字幕| 黄色成人av网| 亚洲18私人小影院| 日韩中文字幕在线| 日韩在线中文字幕| 日本在线观看天堂男亚洲| 亚洲欧美色婷婷| 97婷婷涩涩精品一区| 久久久噜噜噜久久| 久久久久久久久久婷婷| 亚洲色图av在线| 国产日韩欧美中文在线播放| 久久国产天堂福利天堂| 欧美午夜美女看片| 精品国产网站地址| 一区二区亚洲欧洲国产日韩| 久久久久久久999| 国产女精品视频网站免费| 色视频www在线播放国产成人| 国产精品自拍小视频| 97在线免费视频| 国产亚洲日本欧美韩国| 最新91在线视频| 国产成人一区二区三区小说| 欧美性色19p| 欧美成人精品在线| 精品免费在线视频| 欧美另类极品videosbest最新版本| 国产91在线高潮白浆在线观看| 91久久久精品| 国产精品一区专区欧美日韩| 中文字幕国产亚洲2019| 少妇高潮久久久久久潘金莲| 久久精品久久久久久国产 免费| 日韩网站在线观看| 超碰日本道色综合久久综合| 久久久人成影片一区二区三区观看| 国产亚洲欧美aaaa| 亚洲欧美在线x视频| 8090理伦午夜在线电影| 欧美性极品xxxx做受| 国产精品成人观看视频国产奇米| 中文在线资源观看视频网站免费不卡| 日韩a**站在线观看| 欧美日韩国产综合新一区| 在线亚洲男人天堂| 国产精品久久久久久久午夜| 亚洲精品久久久久久久久| 欧美激情第一页xxx| 久久久免费av| 91高潮精品免费porn| 亚洲视频在线播放| 国产日韩欧美另类| 亚洲二区在线播放视频| 97在线视频一区| 日本a级片电影一区二区| 日韩欧美中文第一页| 日韩成人高清在线| 国产精品jizz在线观看麻豆| 日韩精品视频中文在线观看| 亚洲成色www8888| 久久99亚洲精品| 国产精品igao视频| 欧美国产日韩免费| 久热精品视频在线| 国产精品色婷婷视频| 精品亚洲一区二区三区在线观看| 亚洲国产欧美日韩精品| 在线成人激情视频| 国产一区香蕉久久| 97成人在线视频| 亚洲欧美制服第一页| 国产999精品久久久| 国产精品福利久久久| 国产91在线播放精品91| 亚洲a∨日韩av高清在线观看| 亚洲人在线观看| 日韩精品极品在线观看播放免费视频| 亚洲精品乱码久久久久久按摩观| 成人写真视频福利网| 亚洲精品aⅴ中文字幕乱码| 亚洲欧洲一区二区三区久久| 久久久久久久电影一区| 国产一区二区三区精品久久久| 亚洲欧美一区二区三区情侣bbw| 丰满岳妇乱一区二区三区| 亲爱的老师9免费观看全集电视剧| 欧美一区第一页| 97视频在线观看亚洲| 亚洲男女自偷自拍图片另类| 亚洲欧美激情四射在线日| 91在线视频精品| 久久中文字幕国产| 欧美精品久久久久久久久| 亚洲成人教育av| 51色欧美片视频在线观看| 亚洲精品一区二区三区不| 亚洲精选在线观看| 国产一区二区日韩精品欧美精品| 久久国产精品久久久久| 久久人人爽人人爽人人片亚洲| 中文字幕少妇一区二区三区| 欧美黄色免费网站| 日韩亚洲一区二区| 国产精品偷伦视频免费观看国产| 亚洲欧美日韩一区二区在线| 久久中文字幕在线| 久久精品国产精品| 91亚洲午夜在线| 亚洲人成网7777777国产| 国产mv久久久| 欧美在线视频一二三| 国产精品影院在线观看| 国产91精品黑色丝袜高跟鞋| 午夜免费在线观看精品视频| 亚洲视频视频在线| 精品伊人久久97| 欧美黄色小视频| 茄子视频成人在线| 视频在线一区二区| 国产精品一区二区电影| 欧美午夜视频在线观看| 一本色道久久88精品综合| 日本免费在线精品| 欧美激情啊啊啊| 亚洲一区二区免费| 国模gogo一区二区大胆私拍| 精品亚洲一区二区三区四区五区| 欧美高清一级大片| 国内精品小视频在线观看| 日韩av综合中文字幕| 国内精品伊人久久| 日韩精品在线视频| 日本久久久a级免费| 91精品国产亚洲| 久久久精品亚洲| 最近中文字幕2019免费| 久久亚洲精品毛片| 亚洲国产精品人人爽夜夜爽| 欧美成人精品三级在线观看| 欧美日韩国产限制| 久久不射热爱视频精品| 国产精品手机播放| 欧美在线视频a| 国产在线精品播放| 中文字幕日韩欧美在线视频| 亚洲精品自拍视频| 欧洲s码亚洲m码精品一区| 日韩成人av网| 搡老女人一区二区三区视频tv| 成人免费网站在线看| 不用播放器成人网| 97人人做人人爱| 亚洲精品免费在线视频| 亚洲国产天堂久久综合网|