標籤:環形緩衝區 緩衝區 ringbuffer memory
SQL Server 環形緩衝區(Ring Buffer) -- RING_BUFFER_MEMORY_BROKER 診斷內部記憶體壓力
記憶體Broker
記憶體Broker的職責是根據其需求在大記憶體消費者之間分配記憶體。記憶體Broker是一種SQLOS的組件,但是與緩衝池緊密結合。此外,記憶體Broker只會將緩衝池的記憶體管理器所控制的記憶體考慮在內。記憶體Broker會監視緩衝池的記憶體需求,以及由大記憶體消費者所消費的記憶體。基於所收集的資訊,它會估計每個消費者的"最佳化"記憶體分布,並將此資訊廣播給消費者。每個消費者會相應地使用此資訊來適應其記憶體使用量。
SQL Server 2005擁有4種主要的記憶體消費者:緩衝池的資料緩衝、查詢執行引擎(有時被稱為工作台記憶體,workspace memory)、緩衝以及編譯引擎。在SQL Server 2005中,只有後3者會被記憶體Broker監視到。
使用者可以通過查詢記憶體Broker的環形緩衝,來監視記憶體Broker當前的、預計的以及推薦的記憶體分布。
select * from sys.dm_os_ring_bufferwherering_buffer_type = ‘RING_BUFFER_MEMORY_BROKER‘
注意,記憶體Broker的環形緩衝只在記憶體Broker希望某個特定組件的行為發生變化(如收縮、增長或者保持穩定)時才會被更新。
使用者可以使用dbcc memorystatus來找到最後一個記憶體Broker的通知。
內部記憶體壓力
當監測到內部記憶體壓力時,為組件在緩衝池分配記憶體的低記憶體通知將被開啟。開啟低記憶體通知允許從使用緩衝池的快取和其他組件中回收頁面。
內部記憶體壓力可以通過調整max server memory選項或當stolen頁面與緩衝池的比例超過80%時觸發。
內部記憶體壓力通知(‘Shrink’)能通過使用下列代碼查詢ring buffer的調用來發現。
selectx.value(‘(//Record/@time)[1]‘, ‘bigint‘) as [Time Stamp],x.value(‘(//Notification)[1]‘, ‘varchar(100)‘) as [Last Notification]from(select cast(record as xml)from sys.dm_os_ring_bufferswhere ring_buffer_type = ‘RING_BUFFER_MEMORY_BROKER‘) as R(x)order by[Time Stamp] desc
650) this.width=650;" title="clip_image001" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image001" src="http://s3.51cto.com/wyfs02/M01/54/1E/wKiom1R4QbSzOEEVAAN3QhNCT80971.jpg" height="215" border="0" />
以下為常用指令碼:
/*RING_BUFFER_MEMORY_BROKER Identity internal memory pressure. Look at the 3 consumers of Memory for SHRINK Notification 1.cache 2.query compilations 3.query executions */select CAST(record AS XML) ,CAST(record AS XML).value(‘/Record[1]/@time[1]‘,‘bigint‘) as time ,CAST(record as XML).value(‘/Record[1]/MemoryBroker[1]/Broker[1]‘,‘varchar(50)‘) as Broker ,CAST(record as XML).value(‘/Record[1]/MemoryBroker[1]/Notification[1]‘,‘varchar(20)‘) as Notification ,CAST(record as XML).value(‘/Record[1]/MemoryBroker[1]/MemoryRatio[1]‘,‘int‘) as MemoryRatio from sys.dm_os_ring_buffers where ring_buffer_type = ‘RING_BUFFER_Memory_broker‘ order by CAST(record as XML).value(‘/Record[1]/MemoryBroker[1]/Broker[1]‘,‘varchar(50)‘) asc, CAST(record as XML).value(‘/Record[1]/MemoryBroker[1]/Notification[1]‘,‘varchar(20)‘) asc
本文出自 “滴水石穿” 部落格,請務必保留此出處http://ultrasql.blog.51cto.com/9591438/1584257
SQL Server 環形緩衝區(Ring Buffer) -- RING_BUFFER_MEMORY_BROKER 診斷內部記憶體壓力