Files
sql-scripts/HCI - average cpu usage prodDb.sql

53 lines
1.8 KiB
Transact-SQL

/*
Fetch the cpu usage over time from [ActiveQuery_ResourceUse]
resolution is on a minute, but can be moved to an hour by playing with the group by clause.
The output of this query is used to populate an excel chart to graph the values
28.10.2024, TSC
*/
USE [ODB_JobManager];
GO
WITH cteSrc
AS (SELECT DISTINCT
[cpu_db_percent],
[cpu_other_percent],
[cpu_idle_percent],
[RunDate],
CONVERT(VARCHAR(20), [RunDate], 120) AS tstamp
FROM [dbo].[ActiveQuery_ResourceUse]
WHERE [cpu_db_percent] IS NOT NULL
)
SELECT *
FROM (
SELECT
MIN([cteSrc].[tstamp]) AS tstamp,
DATEPART(DAY, [cteSrc].[RunDate]) AS [day],
DATEPART(HOUR, [cteSrc].[RunDate]) AS [hour],
DATEPART(MINUTE, [cteSrc].[RunDate]) AS [minute],
AVG([cteSrc].[cpu_db_percent]) AS [avg_cpu_db_percent],
AVG([cteSrc].[cpu_other_percent]) AS [avg_cpu_other_percent],
AVG([cteSrc].[cpu_idle_percent]) AS [avg_cpu_idle_percent],
AVG([cteSrc].[cpu_db_percent]) + AVG([cteSrc].[cpu_other_percent]) AS [avg_cpu_total_percent]
,CASE
WHEN AVG([cteSrc].[cpu_db_percent]) + AVG([cteSrc].[cpu_other_percent]) >= 80 THEN 1 --cpu usage is over 80 %
ELSE 0
END AS [high_cpu_usage_alert]
FROM [cteSrc]
WHERE DATEPART(HOUR, [cteSrc].[RunDate]) BETWEEN 7 AND 19
GROUP BY DATEPART(DAY, [cteSrc].[RunDate]), DATEPART(HOUR, [cteSrc].[RunDate]), DATEPART(MINUTE, [cteSrc].[RunDate])
--ORDER BY DATEPART(DAY, [cteSrc].[RunDate]), DATEPART(HOUR, [cteSrc].[RunDate]), DATEPART(MINUTE, [cteSrc].[RunDate])
)x
WHERE x.[day] = 28
ORDER BY [x].[day], [x].[hour], [x].[minute]
RETURN
SELECT MIN([cpu_idle_percent]), [RunDate]
FROM [dbo].[ActiveQuery_ResourceUse]
WHERE [cpu_idle_percent] IS NOT NULL
GROUP BY [RunDate]
HAVING MIN([cpu_idle_percent]) < 20