成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

數據庫 SQL Server
本文主要向你介紹的是正確優化SQL Server內存占用的執行緩存的實際操作方案,以及對其在實際操作中的要用到的執行腳本的描述。

以下的文章主要向大家講述的是正確優化SQL Server內存占用的執行緩存的實際操作方案,使用參數化查詢來對執行緩存占用進行減少。我們主要是通過如下例子來說明一下正確使用參數化查詢對緩存占用的影響。

為方便試驗,我們使用了一臺沒有其它負載的SQL Server進行如下實驗。

下面的腳本循環執行一個簡單的查詢,共執行10000次。首先,我們清空一下SQL Server已經占用的緩存:

dbcc freeproccache然后,執行腳本:

 

  1. DECLARE @t datetimeSET @t = getdate()SET NOCOUNT ONDECLARE @i INT,  
  2. @count INT, @sql nvarchar(4000)SET @i = 20000WHILE @i <= 30000BEGIN SET   
  3. @sql = 'Select @count=count(*) FROM P_Order Where MobileNo = ' + cast( @i as varchar(10) )   
  4. EXEC sp_executesql @sql ,N'@count INT OUTPUT',   
  5. @count OUTPUT SET @i = @i + 1ENDPRINT DATEDIFF( second, @t, current_timestamp  

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

11使用了11秒完成10000次查詢。我們看一下SQL Server緩存中所占用的查詢計劃:Select Count(*) CNT,sum(size_in_bytes) TotalSizeFrom sys.dm_exec_cached_plans查詢結果:共有2628條執行計劃緩存在SQL Server中。它們所占用的緩存達到:

92172288字節 = 90012KB = 87 MB。我們也可以使用dbcc memorystatus 命令來檢查SQL Server的執行緩存和數據緩存占用。執行結果如下:

執行緩存占用了90088KB,有2629個查詢計劃在緩存里,有1489頁空閑內存(每頁8KB)可以被數據緩存和其他請求所使用。我們現在修改一下前面的腳本,然后重新執行一下dbcc freeproccache。

再執行一遍修改后的腳本:

 

  1. DECLARE @t datetimeSET @t = getdate()SET NOCOUNT ONDECLARE @i INT,   
  2. @count INT, @sql nvarchar(4000)SET @i = 20000WHILE @i <= 30000BEGIN SET   
  3. @sql = 'select @countcount=count(*) FROM P_Order Where MobileNo =   
  4. @i' EXEC sp_executesql @sql, N'@count int output, @i int', @count OUTPUT,   
  5. @i SET @i = @i + 1ENDPRINT 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的內存占用之執行緩存

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

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

解釋一下原因:我們知道,SQL語句在執行前首先將被編譯并通過查詢優化引擎進行優化SQL Server內存占用,從而得到優化后的執行計劃,然后按照執行計劃被執行。對于整體相似、僅僅是參數不同的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秒鐘時間。

【編輯推薦】

  1. SQL Server 2000 安裝時的一些癥狀歸納
  2. SQL Server 2000 數據倉庫中使用分區之分區設計
  3. SQL Server加密的實際操作步驟
  4. SQL Server 2005模糊查找包的最簡單模式
  5. SQL Server 添加數據庫的操作方案
責任編輯:佚名 來源: 51CTO譯文
相關推薦

2010-07-23 10:36:43

SQL Server內

2010-07-07 13:39:33

SQL Server監

2010-07-14 14:07:50

SQL Server

2010-07-06 09:33:07

SQL Server遠

2015-04-22 14:17:45

SQL SERVERMSSQL SERVE緩沖區

2021-07-28 07:22:40

SQL順序Hive

2010-11-12 11:48:15

2010-11-24 08:54:33

2011-03-30 16:10:08

SQL Server數內存

2010-06-29 17:52:02

SQL Server嵌

2010-06-30 12:33:07

SQL Server補

2010-07-05 15:12:30

SQL Server主

2010-07-05 15:58:23

SQL Server

2010-07-21 10:50:48

SQL Server存

2010-07-21 13:17:47

SQL Server表

2010-07-26 08:49:58

SQL Server游

2010-07-01 16:58:43

SQL Server

2010-09-02 16:28:03

SQL刪除

2010-07-13 16:48:14

SQL Server

2010-07-08 16:08:39

配置SQL Serve
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕精品一区二区三区在线 | av网站免费 | 一区精品国产欧美在线 | 亚洲二区在线 | 日韩精品一区二区三区 | 欧美激情免费在线 | 免费日韩网站 | 久久99精品久久久久久噜噜 | 日韩欧美在线观看 | 逼逼视频 | 国产 亚洲 网红 主播 | 欧美一级久久 | 国产精品入口麻豆www | 国产一区二区三区在线视频 | 日韩av在线一区二区三区 | 日韩国产精品一区二区三区 | 一级一级毛片免费看 | 免费久久精品视频 | 亚洲成人网在线播放 | 蜜桃臀av一区二区三区 | 99资源站 | 免费h在线 | 久久久久久国产精品 | 一区二区免费在线观看 | 久久伊人久久 | 99爱在线| 日本一二区视频 | 91视视频在线观看入口直接观看 | 亚洲视频欧美视频 | 欧美日在线| 青草青草久热精品视频在线观看 | 国产亚洲一区二区在线观看 | 日韩欧美在线一区 | 国产片一区二区三区 | 日韩中文一区 | 四虎伊人 | 男女爱爱福利视频 | 最近中文字幕第一页 | 欧美456 | 婷婷午夜天 | 欧美精品在线观看 |