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

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

SQL Server性能調優之緩存

2024-08-31 01:04:46
字體:
來源:轉載
供稿:網友

在執行任何查詢時,SQL Server都會將數據讀取到內存,數據使用之后,不會立即釋放,而是會緩存在內存Buffer中,當再次執行相同的查詢時,如果所需數據全部緩存在內存中,那么SQL Server不會產生Disk IO操作,立即返回查詢結果,這是SQL Server的性能優化機制。

一,主要的內存消費者(Memory Consumer)

1,數據緩存(Data Cache)

Data Cache是存儲數據頁(Data Page)的緩沖區,當SQL Server需要讀取數據文件(File)中的數據頁(Data Page)時,SQL Server會把整個Page都調入內存(內存中的一個Page叫做buffer),Page是數據訪問的最小單元。

當用戶修改了某個Page上的數據時,SQL Server 會先在內存中修改Buffer,但是不會立即將這個數據葉寫回硬盤,而是等到CheckPoint或lazy Writer進程運行時集中處理。當用戶讀取某個Page后,如果SQL Server沒有內存壓力,它不會在內存中刪除這個Page,因為內存中的數據頁始終存放著數據的最新狀態,如果有其他用戶使用這個Page,SQL Server 不需要從硬盤中讀取一次,節省語句執行的時間。理想情況是SQL Server將用戶需要訪問的所有數據都緩存在內存中,SQL Server 永遠不需要去硬盤讀取數據,只需要在CheckPoint 或 lazy Write運行時把修改過的頁面寫回硬盤即可

2,查詢計劃緩存(Query Plan Cache)

存儲查詢語句和存儲過程的執行計劃,以供重用,而不需要重新編譯(Compile),因為編譯查詢語句產生執行計劃是一個非常耗費資源的過程。

二,查看內存消耗

在SQL Server中,只有內存書記員(Memory Clerk)能夠分配內存,Memory Clerk會記錄已經分配內存的數量,任何一個需要使用內存的對象,必須創建自己的Memory Clerk,并使用該Memory clerk來分配內存。

1,查看Memory clerk分配的內存量

select memory_node_id,  type, pages_kb, virtual_memory_reserved_kb, virtual_memory_committed_kb, shared_memory_reserved_kb, shared_memory_committed_kb, page_size_in_bytesfrom sys.dm_os_memory_clerks where type = 'MEMORYCLERK_SQLQERESERVATIONS'

對于內存結點64,只在DAC中使用。

2,統計Memory Clerk分配的內存總量

select mc.type,mc.name, sum(mc.pages_kb) as AllocatedPages_KB, sum(mc.virtual_memory_reserved_kb) as VM_Reserved_KB, sum(mc.virtual_memory_committed_kb) as VM_Committed_KB, --sum(mc.shared_memory_reserved_kb) as ShareMem_Reserved_KB, --sum(mc.shared_memory_committed_kb) as ShareMem_Committed_KB, max(mc.page_size_in_bytes)/1024 as SinglePageSize_KBfrom sys.dm_os_memory_clerks mcgroup by mc.type,mc.nameorder by AllocatedPages_KB desc,mc.type,mc.name

消耗內存較大的Clerk是:

  • MEMORYCLERK_SQLBUFFERPOOL:基本是Buffer Pool中page的大小
  • OBJECTSTORE_LOCK_MANAGER:鎖結構使用的內存,當發生嚴重的鎖阻塞時,這表明系統中,存儲大量鎖,造成鎖管理占用大量的內存;
  • CACHESTORE_OBJCP:觸發器和存儲過程等模塊(Module)的執行計劃占用的緩存空間;
  • CACHESTORE_SQLCP:動態TSQL語句,即席(Adhoc)查詢和預編譯(Prepared) TSQL的執行計劃緩存;
  • CACHESTORE_COLUMNSTOREOBJECTPOOL:列存儲索引(ColumnStore Index)占用的緩存

3,查看緩存中的數據頁

當數據頁從硬盤讀取到內存之后,該數據頁被復制到緩沖池(Buffer Pool),供SQL Server重用。每個緩存的數據頁都有一個緩存描述器(Buffer Descriptor),用戶唯一標識內存中的數據頁,在SQL Server實例中緩存的每一個數據頁,都能從 sys.dm_os_buffer_descriptors 查看緩存描述的信息。

select DB_NAME(bd.database_id) as dbname, OBJECT_NAME(p.object_id) as ObjectName, i.name as IndexName, count(0) as BufferCounts, sum(bd.free_space_in_bytes)/1024 as TotalFreeSpace_KB, cast(sum(bd.free_space_in_bytes)/(8*1024.0)/count(0) as decimal(10,4))*100 as FreeSpaceRatio, sum(cast(bd.is_modified as int)) as TotalDirtyPages, sum(bd.row_count) as TotalRowCountsfrom sys.allocation_units au inner join sys.dm_os_buffer_descriptors bd on au.allocation_unit_id=bd.allocation_unit_idinner join sys.partitions p  on au.container_id=p.hobt_idinner join sys.indexes i  on p.object_id=i.object_id and p.index_id=p.index_idinner join sys.objects o on p.object_id=o.object_idwhere bd.database_id=DB_ID(N'database_name') and o.type<>N'S'group by bd.database_id,p.object_id,i.name order by BufferCounts desc,dbname,ObjectName

4,查看計劃緩存

產生執行計劃是十分消耗CPU資源的,SQL Server會在內存的Plan Cache中存儲每個查詢計劃(Query Plan),及其占用的內存空間,重用次數等信息。

select cp.objtype,cp.cacheobjtype, sum(cp.size_in_bytes) as TotalSize_B, COUNT(cp.bucketid) as CacheCounts, sum(cp.refcounts) as TotalRefCounts, sum(cp.usecounts) as TotalUseCountsfrom sys.dm_exec_cached_plans cp group by cp.objtype,cp.cacheobjtypeorder by TotalSize_B desc

三,清空緩存

在調優存儲過程性能時,清空緩存是必需的,緩沖池(Buffer Pool)是SQL Server的緩存管理器,包含了SQL Server的絕大部分緩存數據(Cache),例如,執行計劃緩存(Plan cache),數據緩存(Data cache)等。

清空緩存常用的命令有如下三個:

CHECKPOINTDBCC DROPCLEANBUFFERSDBCC FREEPROCCACHE

Checkpoint和DBCC DROPCLEANBUFFERS 用于清理數據緩存(Data Cache)中的臟頁(dirty pages)和干凈頁(clean pages),而DBCC FREEPROCCACHE 用于清空所有的計劃緩存(Plan Cache)。

1,清空數據緩存

checkpoint 用于將臟頁(Dirty Pages)寫入硬盤,臟頁(Dirty Pages)是指數據頁讀入緩存后,被修改過,導致內存中數據頁和硬盤中的數據頁中的內容不同;干凈頁(Clean Pages)是指數據頁被讀入緩存后,沒有被修改過,所以,內存中的數據頁和硬盤中的數據頁中的內容相同。不管是Dirty pages 還是 Clean pages 都是Data Cache,在性能調優時,都必須從內存中清理掉,否則,查詢性能將忽略掉數據從硬盤加載到內存的IO消耗,影響查詢語句的執行情況。

CHECKPOINT 命令用于產生冷緩存(Cold buffer Cache),該命令將當前數據庫產生的所有臟頁寫入到硬盤,并清理內存buffer;在執行CHECKPOINT命令之后,執行 DBCC DROPCLEANBUFFERS 用于從緩沖池中清空所有的干凈頁。

在性能測試時,使用DBCC DROPCLEANBUFFERS從SQLSERVER的數據緩存池中清除所有的clean緩存數據,需要注意的是該命令只移走干凈的緩存,不移走臟緩存。因此,在執行這個命令前,應該先執行CheckPoint,將所有臟頁寫入磁盤,這樣在運行DBCC RROPCLEANBUFFERS 時,可以保證所有的數據緩存被清理,而不是其中的一部分。

2,清空計劃緩存

計劃緩存(Plan Cache)用于緩存查詢語句的執行計劃,每一條查詢語句在執行之后,其查詢計劃都會緩存Plan Cache中。在產品環境中,不要輕易清理掉Plan Cache。如果檢測到某個Plan Cache產生參數嗅探問題,導致性能十分低下,推薦修改查詢語句,重新編譯存儲過程,以單獨刷新該SP的計劃緩存。

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle} ) ]

計劃緩存,之前叫做過程緩存(procedure cache),執行DBCC FREEPROCCACHE 命令,釋放所有的計劃緩存,這回導致存儲過程,AdHoc 查詢等查詢必須重新編譯,產生新的計劃緩存。

四,強制重新編譯執行計劃

修改存儲過程,觸發器等模塊(Module)能夠使其執行計劃重新編譯,除此之外,還有其他方法,能夠強制重新編譯執行計劃

1,標記,下次重新編譯

使用該存儲過程,標記一個執行模塊(SP,Trigger,User-Defined Function)在下次執行時,重新編譯執行計劃

sys.sp_recompile [ @objname = ] 'object'

2,不復用執行計劃

在創建存儲過程時,使用WITH RECOMPILE 選項,在每次執行SP時,都重新編譯,使用新的執行計劃。

CREATE PROCEDURE dbo.usp_procname  @Parameter_Name varchar(30) = 'Parameter_default_value'WITH RECOMPILE

3,執行時重新編譯

在執行存儲過程時,重新編譯存儲過程的執行計劃

exec dbo.usp_procname @Parameter_name='Parameter_value' WITH RECOMPILE

4,語句級別的重新編譯

在SP中,使用查詢選項 option(recompile),只重新編譯該語句級別的執行計劃

select column_name_listfrom dbo.tablenameoption(recompile)

SQL Server在執行查詢之后,查詢提示(RECOMPILE)指示存儲引擎將計劃緩存拋棄,在下次執行存儲過程時,強制查詢優化器重新編譯,生成新的執行計劃。在重新編譯時,SQL Server 優化器使用當前的變量值生成新的計劃緩存。

附:

冷緩存,熱緩存,臟緩存和干凈緩存名詞解釋:

  • 凈緩存頁(Clean Buffer) 是指內存中未被修改的數據頁,DBCC DROPCLEANBUFFERS 用于從緩沖池(Buffer Pool)移除干凈頁,釋放Buffer。
  • 臟緩存頁(Dirty Buffer)是指數據頁在內存中被修改,但是還沒有寫入到硬盤中,導致硬盤中的數據不同于內存,通常情況下,臟頁通過CHECKPOINT進程來自動同步,CHECKPOINT 將臟頁數據寫入到硬盤中,使內存和硬盤文件中的數據保持一致,能夠減少數據還原的時間。
  • 冷緩存頁(Cold Buffer)是指,在數據處理階段,最近沒有被使用的緩存頁。
  • 熱緩存頁(Hot Buffer)是指,在數據處理階段,最近經常被使用的緩存頁。

參考文檔:

Recompile a Stored Procedure

What is a COLD, DIRTY or CLEAN Buffer

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VeVb武林網!


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
伊人亚洲福利一区二区三区| 国产欧美一区二区三区久久人妖| 国产视频久久网| 美日韩精品免费观看视频| 亚洲精品久久7777777| 庆余年2免费日韩剧观看大牛| 日韩免费观看在线观看| 国产精品2018| 欧美成人全部免费| 日韩有码在线播放| 国产一区欧美二区三区| 69久久夜色精品国产69乱青草| 日韩成人在线网站| 亚洲直播在线一区| 亚洲性线免费观看视频成熟| 日韩高清电影好看的电视剧电影| 欧美成人午夜激情| 久久人人爽国产| 综合国产在线观看| 九九精品视频在线观看| 欧美一区深夜视频| 久久精品国产一区二区三区| 在线观看日韩www视频免费| 亚洲自拍高清视频网站| 91在线国产电影| 亚洲自拍偷拍在线| 亚洲精品一区在线观看香蕉| 97在线视频观看| 日韩高清人体午夜| 日本最新高清不卡中文字幕| 911国产网站尤物在线观看| 日韩av影视在线| 欧美俄罗斯性视频| 久久福利网址导航| 91九色国产社区在线观看| 国产一区二区三区直播精品电影| 成人精品在线视频| 亚洲韩国欧洲国产日产av| 久久久亚洲精品视频| 亚洲欧美精品伊人久久| 中文字幕亚洲精品| 日本道色综合久久影院| 国产精品2018| 激情懂色av一区av二区av| 欧美中文在线视频| 欧美精品18videos性欧美| 亚洲第一视频网站| 亚洲欧美精品suv| 国产精品亚洲激情| 久久99视频免费| 欧美日韩国产在线播放| 国产精品欧美一区二区三区奶水| 国产精品入口日韩视频大尺度| 日韩av片永久免费网站| 深夜福利亚洲导航| 欧美孕妇孕交黑巨大网站| 国产亚洲成精品久久| 国产精品69久久久久| 国产精品久久久久久久久免费| 川上优av一区二区线观看| 久久九九热免费视频| 欧美中文字幕在线观看| 欧美日韩国产精品专区| 精品视频在线播放免| 国产精品免费一区二区三区都可以| 亚洲黄色在线看| 国产精品视频区1| 中文字幕9999| 欧美激情免费视频| 97精品国产97久久久久久| 欧美日韩亚洲精品一区二区三区| 色综合色综合久久综合频道88| 成人xxxx视频| 欧美高清在线视频观看不卡| 久久精品电影网站| 色777狠狠综合秋免鲁丝| 欧美成aaa人片免费看| 在线观看国产精品91| 欧美做爰性生交视频| 91老司机精品视频| 国产国语刺激对白av不卡| 久久久在线观看| 精品视频在线播放免| 57pao国产成人免费| 久久99精品国产99久久6尤物| 日韩av网站导航| 欧美男插女视频| 日韩一级裸体免费视频| 一区二区在线视频| 韩国日本不卡在线| 欧美夫妻性视频| 亚洲福利视频专区| 欧美日韩国产综合视频在线观看中文| 97在线精品国自产拍中文| 一区二区三区回区在观看免费视频| 亚洲福利视频网| 亚洲a成v人在线观看| 久久久久久久香蕉网| 国语自产精品视频在线看抢先版图片| 在线日韩欧美视频| 久久久久久成人精品| 国产成人精品在线| 欧美在线性爱视频| 亚洲一区二区福利| 操日韩av在线电影| 亚洲japanese制服美女| 亚洲欧美日韩在线一区| 中文字幕日韩精品在线观看| 精品国产福利在线| 亚洲自拍偷拍一区| 久久精品视频免费播放| 久久久精品一区二区三区| 日韩av中文字幕在线免费观看| 亚洲一级片在线看| 欧美一区第一页| 欧美乱大交做爰xxxⅹ性3| 国产午夜精品一区二区三区| 欧美在线一区二区三区四| 91久久在线观看| 日韩亚洲第一页| 亚洲精品成人久久| 日本精品视频在线| 日韩中文字幕视频在线| 国产精品福利片| 国产不卡在线观看| 日韩一区二区三区在线播放| 亚洲欧洲日本专区| 欧美大全免费观看电视剧大泉洋| 成人h片在线播放免费网站| 91久久久久久| 91沈先生作品| 国产欧美精品xxxx另类| 国产免费亚洲高清| 久久成年人免费电影| 精品一区二区电影| 欧洲亚洲女同hd| 欧美成人亚洲成人日韩成人| 91久久精品在线| 欧美中文字幕在线视频| 日韩不卡中文字幕| 日韩欧美精品在线观看| 色无极亚洲影院| 91久久久久久久一区二区| 久久亚洲精品一区| 夜夜嗨av色一区二区不卡| 91av视频在线免费观看| 色综合视频一区中文字幕| yw.139尤物在线精品视频| 91丨九色丨国产在线| 黑人巨大精品欧美一区免费视频| 亚洲成人网av| 国产日韩精品入口| 51午夜精品视频| 日韩美女免费观看| 亚洲区在线播放| 中文精品99久久国产香蕉| 亚洲欧洲成视频免费观看| 在线视频一区二区| 欧美色xxxx| 欧美黄色免费网站| 欧美国产日韩视频| 欧美高跟鞋交xxxxhd| 伦伦影院午夜日韩欧美限制| 亚洲精品在线91|