(DIR) Return Create A Forum - Home --------------------------------------------------------- ExcelSoft Database Professionals (HTM) https://esdbp.createaforum.com --------------------------------------------------------- ***************************************************** (DIR) Return to: Scripts ***************************************************** #Post#: 118-------------------------------------------------- Ring Buffer quereis to troubleshoot performance issues By: srinivasma_exceldbp Date: December 25, 2014, 4:04 am --------------------------------------------------------- -- Retrieve all available ring buffers -- System Health Analysis through sys.dm_os_ring_buffers SELECT ring_buffer_type, COUNT(*) AS 'Count' FROM sys.dm_os_ring_buffers GROUP BY ring_buffer_type GO -- Retrieve data from the RING_BUFFER_RESOURCE_MONITOR ring buffer SELECT CAST(record AS XML), * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_RESOURCE_MONITOR' GO -- Retrieve the memory usage SELECT EventTime, record.value('(/Record/ResourceMonitor/Notification)[1]', 'varchar(max)') AS 'Type', record.value('(/Record/MemoryRecord/TotalPhysicalMemory)[1]', 'bigint') AS 'TotalPhysicalMemoryInKb', record.value('(/Record/MemoryRecord/AvailablePhysicalMemory)[1]' , 'bigint') AS 'AvailablePhysicalMemoryInKb', record.value('(/Record/MemoryRecord/AvailableVirtualAddressSpace )[1]', 'bigint') AS 'AvailableVirtualAddressSpaceInKb', record.value('(/Record/MemoryRecord/TotalPageFile)[1]', 'bigint') AS 'TotalPageFileInKb', record.value('(/Record/MemoryRecord/AvailablePageFile)[1]', 'bigint') AS 'AvailablePageFile' FROM ( SELECT DATEADD (ss, (-1 * ((cpu_ticks / CONVERT (float, ( cpu_ticks / ms_ticks ))) - [timestamp])/1000), GETDATE()) AS EventTime, CONVERT (xml, record) AS record FROM sys.dm_os_ring_buffers CROSS JOIN sys.dm_os_sys_info WHERE ring_buffer_type = 'RING_BUFFER_RESOURCE_MONITOR' ) AS t ORDER BY EventTime DESC GO -- Retrieve data from the RING_BUFFER_SCHEDULER_MONITOR ring buffer SELECT CAST(record AS XML), * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR' GO -- Retrieve the CPU utilization over time SELECT EventTime, n.value('(SystemIdle)[1]', 'int') AS 'CPU_Idle', n.value('(ProcessUtilization)[1]', 'int') AS 'CPU_SQL', 100 - (n.value('(SystemIdle)[1]', 'int') + n.value('(ProcessUtilization)[1]', 'int')) AS 'CPU_NonSQL' FROM ( SELECT DATEADD(ss, (-1 * ((cpu_ticks / CONVERT(FLOAT, (cpu_ticks / ms_ticks))) - [timestamp]) / 1000), GETDATE()) AS 'EventTime', CONVERT(XML, record) AS 'record' FROM sys.dm_os_ring_buffers CROSS JOIN sys.dm_os_sys_info WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR') AS t CROSS APPLY record.nodes('/Record/SchedulerMonitorEvent/SystemHealth' ) AS q(n) ORDER BY EventTime GO -- Retrieve data from the RING_BUFFER_EXCEPTION ring buffer SELECT CAST(record AS XML), * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_EXCEPTION' GO -- Error Exceptions SELECT COUNT(*) AS 'Count', 'RING_BUFFER_EXCEPTION' AS 'Type', t.[error], m.text AS 'ErrorMessage' FROM ( RingBuffer.Record.value('Error[1]', 'int') AS 'Error' FROM ( SELECT CAST(Record AS XML) AS 'TargetData ' FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_EXCEPTION' ) AS Data CROSS APPLY TargetData.nodes('/Record/Exception') AS RingBuffer(Record) ) t LEFT JOIN sys.messages m ON t.[error] = m.message_id AND m.[language_id] = SERVERPROPERTY('LCID') GROUP BY m.[text], t.[error] GO -- Retrieve data from the RING_BUFFER_CONNECTIVITY ring buffer SELECT CAST(record AS XML), * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_CONNECTIVITY' GO -- Connectivity issues and timers SELECT record.value('(Record/@id)[1]', 'int') AS 'ID', record.value('(Record/@type)[1]', 'varchar(50)') AS 'Type', EventTime, n.value('(RecordType)[1]', 'varchar(50)') AS 'RecordType', n.value('(RecordSource)[1]', 'varchar(50)') AS 'RecordSource', n.value('(Spid)[1]', 'int') AS 'SPID', n.value('(SniConnectionid)[1]', 'uniqueidentifier') AS 'SniConnectionID', n.value('(SniProvider)[1]', 'int') AS 'SniProvider', n.value('(OSError)[1]', 'int') AS 'OSError', n.value('(SniConsumerError)[1]', 'int') AS 'SniConsumerError', n.value('(State)[1]', 'int') AS 'State', n.value('(RemoteHost)[1]', 'varchar(50)') AS 'RemoteHost', n.value('(RemotePort)[1]', 'varchar(50)') AS 'RemotePort', n.value('(LocalHost)[1]', 'varchar(50)') AS 'LocalHost', n.value('(LocalPort)[1]', 'varchar(50)') AS 'LocalPort', n.value('(RecordTime)[1]', 'datetime') AS 'RecordTime', n.value('(LoginTimers/TotalLoginTimeinMilliseconds)[1]', 'bigint') AS 'TotalLoginTimeinMilliseconds', n.value('(LoginTimers/LoginTaskEnqueuedinMilliseconds)[1]', 'bigint') AS 'LoginTaskEnqueuedinMilliseconds', n.value('(LoginTimers/NetworkWritesinMilliseconds)[1]', 'bigint') AS 'NetworkWritesinMilliseconds', n.value('(LoginTimers/NetworkReadsinMilliseconds)[1]', 'bigint') AS 'NetworkReadsinMilliseconds', n.value('(LoginTimers/SslProcessinginMilliseconds)[1]', 'bigint') AS 'SslProcessinginMilliseconds', n.value('(LoginTimers/SspiProcessinginMilliseconds)[1]', 'bigint') AS 'SspiProcessinginMilliseconds', n.value('(LoginTimers/LoginTriggerAndResourceGovernorProcessingi nMilliseconds)[1]', 'bigint') AS 'LoginTriggerAndResourceGovernorProcessinginMilliseconds', n.value('(TdsBuffersinformation/TdsinputBufferError)[1]', 'int') AS 'TdsinputBufferError', n.value('(TdsBuffersinformation/TdsOutputBufferError)[1]', 'int') AS 'TdsOutputBufferError', n.value('(TdsBuffersinformation/TdsinputBufferBytes)[1]', 'int') AS 'TdsinputBufferBytes', n.value('(TdsDisconnectFlags/PhysicalConnectionisKilled)[1]', 'int') AS 'PhysicalConnectionisKilled', n.value('(TdsDisconnectFlags/DisconnectDueToReadError)[1]', 'int') AS 'DisconnectDueToReadError', n.value('(TdsDisconnectFlags/NetworkErrorFoundininputStream)[1]' , 'int') AS 'NetworkErrorFoundininputStream', n.value('(TdsDisconnectFlags/ErrorFoundBeforeLogin)[1]', 'int') AS 'ErrorFoundBeforeLogin', n.value('(TdsDisconnectFlags/SessionisKilled)[1]', 'int') AS 'SessionisKilled', n.value('(TdsDisconnectFlags/NormalDisconnect)[1]', 'int') AS 'NormalDisconnect', n.value('(TdsDisconnectFlags/NormalLogout)[1]', 'int') AS 'NormalLogout' FROM ( SELECT DATEADD (ss, (-1 * ((cpu_ticks / CONVERT (FLOAT, (cpu_ticks / ms_ticks))) - [timestamp]) / 1000), GETDATE()) AS 'EventTime', CONVERT (xml, record) AS 'record' FROM sys.dm_os_ring_buffers CROSS JOIN sys.dm_os_sys_info WHERE ring_buffer_type = 'RING_BUFFER_CONNECTIVITY' ) AS tab CROSS APPLY record.nodes('/Record/ConnectivityTraceRecord') AS x(n) ORDER BY RecordTime GO -- Retrieve data from the RING_BUFFER_MEMORY_BROKER ring buffer SELECT CAST(record AS XML), * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_MEMORY_BROKER' GO -- Retrieve memory utilization -- => MEMORYBROKER_FOR_CACHE: Memory that is allocated for use by cached objects -- => MEMORYBROKER_FOR_STEAL: Memory that is stolen from the buffer pool. This memory is not available for reuse by other components until it is freed by the current owner -- => MEMORYBROKER_FOR_RESERVE: Memory reserved for future use by currently executing requests SELECT EventTime, n.value('(Pool)[1]', 'int') AS 'Pool', n.value('(Broker)[1]', 'varchar(40)') AS 'Broker', n.value('(Notification)[1]', 'varchar(40)') AS 'Notification', n.value('(MemoryRatio)[1]', 'int') AS 'MemoryRatio', n.value('(NewTarget)[1]', 'int') AS 'NewTarget', n.value('(Overall)[1]', 'int') AS 'Overall', n.value('(Rate)[1]', 'int') AS 'Rate', n.value('(CurrentlyPredicted)[1]', 'int') AS 'CurrentlyPredicted', n.value('(CurrentlyAllocated)[1]', 'int') AS 'CurrentlyAllocated' FROM ( SELECT DATEADD(ss, (-1 * ((cpu_ticks / CONVERT (FLOAT, (cpu_ticks / ms_ticks))) - [timestamp]) / 1000), GETDATE()) AS EventTime, CONVERT(XML, record) AS record FROM sys.dm_os_ring_buffers CROSS JOIN sys.dm_os_sys_info WHERE ring_buffer_type = 'RING_BUFFER_MEMORY_BROKER' ) AS t CROSS APPLY record.nodes('/Record/MemoryBroker') AS x(n) ORDER BY EventTime GO -- Retrieve data from the RING_BUFFER_OOM ring buffer SELECT CAST(record AS XML), * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_OOM' GO -- Retrieve Out of Memory Notifications SELECT EventTime, n.value('(OOM/Action)[1]', 'varchar(50)') AS 'Action', n.value('(OOM/Resources)[1]', 'int') AS 'Resources', n.value('(OOM/Task)[1]', 'varchar(20)') AS 'Task', n.value('(OOM/Pool)[1]', 'int') AS 'PoolID', n.value('(MemoryRecord/MemoryUtilization)[1]', 'int') AS 'MemoryUtilization', n.value('(MemoryRecord/AvailablePhysicalMemory)[1]', 'int') AS 'AvailablePhysicalMemory', n.value('(MemoryRecord/AvailableVirtualAddressSpace)[1]', 'int') AS 'AvailableVirtualAddressSpace' FROM ( SELECT DATEADD(ss, (-1 * ((cpu_ticks / CONVERT (FLOAT, (cpu_ticks / ms_ticks))) - [timestamp]) / 1000), GETDATE()) AS EventTime, CONVERT(XML, record) AS record FROM sys.dm_os_ring_buffers CROSS JOIN sys.dm_os_sys_info WHERE ring_buffer_type = 'RING_BUFFER_OOM' ) AS t CROSS APPLY record.nodes('/Record') AS x(n) GO -- Retrieve data from the RING_BUFFER_SECURITY_ERROR ring buffer SELECT CAST(record AS XML), * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_SECURITY_ERROR' GO -- Retrieve data from the RING_BUFFER_SECURITY_ERROR ring buffer SELECT CONVERT(VARCHAR(30), GETDATE(), 121) AS 'Runtime', DATEADD(ms, (t.RecordTime - sys.ms_ticks), GETDATE()) AS 'NotificationTime', t.* , sys.ms_ticks AS 'CurrentTime' FROM ( SELECT x.value('(//Record/Error/ErrorCode)[1]', 'varchar(30)') AS 'ErrorCode', x.value('(//Record/Error/CallingAPIName)[1]', 'varchar(255)') AS 'CallingAPIName', x.value('(//Record/Error/APIName)[1]', 'varchar(255)') AS 'APIName', x.value('(//Record/Error/SPID)[1]', 'int') AS 'SPID', x.value('(//Record/@id)[1]', 'bigint') AS 'RecordID', x.value('(//Record/@type)[1]', 'varchar(30)') AS 'Type', x.value('(//Record/@time)[1]', 'bigint') AS 'RecordTime' FROM ( SELECT CAST (record AS XML) FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_SECURITY_ERROR' ) AS R(x) ) t CROSS JOIN sys.dm_os_sys_info sys ORDER BY t.RecordTime GO *****************************************************