SQLServer - Fixes sqlserver_process_cpu calculation (#8549)
This commit is contained in:
parent
b2b361356e
commit
9aaaf72a96
|
|
@ -1352,33 +1352,58 @@ const sqlServerCPUV2 string = `
|
||||||
/*The ring buffer has a new value every minute*/
|
/*The ring buffer has a new value every minute*/
|
||||||
IF SERVERPROPERTY('EngineEdition') IN (2,3,4) /*Standard,Enterpris,Express*/
|
IF SERVERPROPERTY('EngineEdition') IN (2,3,4) /*Standard,Enterpris,Express*/
|
||||||
BEGIN
|
BEGIN
|
||||||
SELECT
|
;WITH utilization_cte AS
|
||||||
'sqlserver_cpu' AS [measurement]
|
(
|
||||||
,REPLACE(@@SERVERNAME,'\',':') AS [sql_instance]
|
SELECT
|
||||||
,[SQLProcessUtilization] AS [sqlserver_process_cpu]
|
[SQLProcessUtilization] AS [sqlserver_process_cpu]
|
||||||
,[SystemIdle] AS [system_idle_cpu]
|
,[SystemIdle] AS [system_idle_cpu]
|
||||||
,100 - [SystemIdle] - [SQLProcessUtilization] AS [other_process_cpu]
|
,100 - [SystemIdle] - [SQLProcessUtilization] AS [other_process_cpu]
|
||||||
FROM (
|
|
||||||
SELECT TOP 1
|
|
||||||
[record_id]
|
|
||||||
/*,dateadd(ms, (y.[timestamp] - (SELECT CAST([ms_ticks] AS BIGINT) FROM sys.dm_os_sys_info)), GETDATE()) AS [EventTime] --use for check/debug purpose*/
|
|
||||||
,[SQLProcessUtilization]
|
|
||||||
,[SystemIdle]
|
|
||||||
FROM (
|
FROM (
|
||||||
SELECT record.value('(./Record/@id)[1]', 'int') AS [record_id]
|
SELECT TOP 1
|
||||||
,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS [SystemIdle]
|
[record_id]
|
||||||
,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS [SQLProcessUtilization]
|
,[SQLProcessUtilization]
|
||||||
,[TIMESTAMP]
|
,[SystemIdle]
|
||||||
FROM (
|
FROM (
|
||||||
SELECT [TIMESTAMP]
|
SELECT
|
||||||
,convert(XML, [record]) AS [record]
|
record.value('(./Record/@id)[1]', 'int') AS [record_id]
|
||||||
FROM sys.dm_os_ring_buffers
|
,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS [SystemIdle]
|
||||||
WHERE [ring_buffer_type] = N'RING_BUFFER_SCHEDULER_MONITOR'
|
,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS [SQLProcessUtilization]
|
||||||
AND [record] LIKE '%<SystemHealth>%'
|
,[TIMESTAMP]
|
||||||
) AS x
|
FROM (
|
||||||
) AS y
|
SELECT
|
||||||
ORDER BY record_id DESC
|
[TIMESTAMP]
|
||||||
) as z
|
,convert(XML, [record]) AS [record]
|
||||||
|
FROM sys.dm_os_ring_buffers
|
||||||
|
WHERE
|
||||||
|
[ring_buffer_type] = N'RING_BUFFER_SCHEDULER_MONITOR'
|
||||||
|
AND [record] LIKE '%<SystemHealth>%'
|
||||||
|
) AS x
|
||||||
|
) AS y
|
||||||
|
ORDER BY [record_id] DESC
|
||||||
|
) AS z
|
||||||
|
),
|
||||||
|
processor_Info_cte AS
|
||||||
|
(
|
||||||
|
SELECT (cpu_count / hyperthread_ratio) as number_of_physical_cpus
|
||||||
|
FROM sys.dm_os_sys_info
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
'sqlserver_cpu' AS [measurement]
|
||||||
|
,REPLACE(@@SERVERNAME,'\',':') AS [sql_instance]
|
||||||
|
,[sqlserver_process_cpu]
|
||||||
|
,[system_idle_cpu]
|
||||||
|
,100 - [system_idle_cpu] - [sqlserver_process_cpu] AS [other_process_cpu]
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
(case
|
||||||
|
when [other_process_cpu] < 0 then [sqlserver_process_cpu] / a.number_of_physical_cpus
|
||||||
|
else [sqlserver_process_cpu]
|
||||||
|
end) as [sqlserver_process_cpu]
|
||||||
|
,[system_idle_cpu]
|
||||||
|
FROM utilization_cte
|
||||||
|
CROSS APPLY processor_Info_cte a
|
||||||
|
) AS b
|
||||||
|
|
||||||
END
|
END
|
||||||
`
|
`
|
||||||
|
|
|
||||||
|
|
@ -1136,37 +1136,60 @@ IF SERVERPROPERTY('EngineEdition') NOT IN (2,3,4) BEGIN /*NOT IN Standard,Enterp
|
||||||
DECLARE @ErrorMessage AS nvarchar(500) = 'Telegraf - Connection string Server:'+ @@ServerName + ',Database:' + DB_NAME() +' is not a SQL Server Standard,Enterprise or Express. Check the database_type parameter in the telegraf configuration.';
|
DECLARE @ErrorMessage AS nvarchar(500) = 'Telegraf - Connection string Server:'+ @@ServerName + ',Database:' + DB_NAME() +' is not a SQL Server Standard,Enterprise or Express. Check the database_type parameter in the telegraf configuration.';
|
||||||
RAISERROR (@ErrorMessage,11,1)
|
RAISERROR (@ErrorMessage,11,1)
|
||||||
RETURN
|
RETURN
|
||||||
END
|
END;
|
||||||
|
|
||||||
SELECT
|
WITH utilization_cte AS
|
||||||
'sqlserver_cpu' AS [measurement]
|
(
|
||||||
,REPLACE(@@SERVERNAME,'\',':') AS [sql_instance]
|
SELECT
|
||||||
,[SQLProcessUtilization] AS [sqlserver_process_cpu]
|
[SQLProcessUtilization] AS [sqlserver_process_cpu]
|
||||||
,[SystemIdle] AS [system_idle_cpu]
|
,[SystemIdle] AS [system_idle_cpu]
|
||||||
,100 - [SystemIdle] - [SQLProcessUtilization] AS [other_process_cpu]
|
,100 - [SystemIdle] - [SQLProcessUtilization] AS [other_process_cpu]
|
||||||
FROM (
|
|
||||||
SELECT TOP 1
|
|
||||||
[record_id]
|
|
||||||
,[SQLProcessUtilization]
|
|
||||||
,[SystemIdle]
|
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT TOP 1
|
||||||
record.value('(./Record/@id)[1]', 'int') AS [record_id]
|
[record_id]
|
||||||
,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS [SystemIdle]
|
,[SQLProcessUtilization]
|
||||||
,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS [SQLProcessUtilization]
|
,[SystemIdle]
|
||||||
,[TIMESTAMP]
|
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
[TIMESTAMP]
|
record.value('(./Record/@id)[1]', 'int') AS [record_id]
|
||||||
,convert(XML, [record]) AS [record]
|
,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS [SystemIdle]
|
||||||
FROM sys.dm_os_ring_buffers
|
,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS [SQLProcessUtilization]
|
||||||
WHERE
|
,[TIMESTAMP]
|
||||||
[ring_buffer_type] = N'RING_BUFFER_SCHEDULER_MONITOR'
|
FROM (
|
||||||
AND [record] LIKE '%<SystemHealth>%'
|
SELECT
|
||||||
) AS x
|
[TIMESTAMP]
|
||||||
) AS y
|
,convert(XML, [record]) AS [record]
|
||||||
ORDER BY [record_id] DESC
|
FROM sys.dm_os_ring_buffers
|
||||||
) AS z
|
WHERE
|
||||||
|
[ring_buffer_type] = N'RING_BUFFER_SCHEDULER_MONITOR'
|
||||||
|
AND [record] LIKE '%<SystemHealth>%'
|
||||||
|
) AS x
|
||||||
|
) AS y
|
||||||
|
ORDER BY [record_id] DESC
|
||||||
|
) AS z
|
||||||
|
),
|
||||||
|
processor_Info_cte AS
|
||||||
|
(
|
||||||
|
SELECT (cpu_count / hyperthread_ratio) as number_of_physical_cpus
|
||||||
|
FROM sys.dm_os_sys_info
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
'sqlserver_cpu' AS [measurement]
|
||||||
|
,REPLACE(@@SERVERNAME,'\',':') AS [sql_instance]
|
||||||
|
,[sqlserver_process_cpu]
|
||||||
|
,[system_idle_cpu]
|
||||||
|
,100 - [system_idle_cpu] - [sqlserver_process_cpu] AS [other_process_cpu]
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
(case
|
||||||
|
when [other_process_cpu] < 0 then [sqlserver_process_cpu] / a.number_of_physical_cpus
|
||||||
|
else [sqlserver_process_cpu]
|
||||||
|
end) as [sqlserver_process_cpu]
|
||||||
|
,[system_idle_cpu]
|
||||||
|
FROM utilization_cte
|
||||||
|
CROSS APPLY processor_Info_cte a
|
||||||
|
) AS b
|
||||||
`
|
`
|
||||||
|
|
||||||
// Collects availability replica state information from `sys.dm_hadr_availability_replica_states` for a High Availability / Disaster Recovery (HADR) setup
|
// Collects availability replica state information from `sys.dm_hadr_availability_replica_states` for a High Availability / Disaster Recovery (HADR) setup
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue