Files
sql-scripts/TPDT-268 - ACP in task sequence/dba_storedProcedures/mon_Check_Performance_Issue.sql
2024-03-07 16:52:14 +01:00

175 lines
5.8 KiB
Transact-SQL

USE [HCITools]
GO
/****** Object: StoredProcedure [dbo].[mon_Check_Performance_Issue] Script Date: 11/09/2018 10:48:38 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mon_Check_Performance_Issue]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mon_Check_Performance_Issue]
GO
USE [HCITools]
GO
/****** Object: StoredProcedure [dbo].[mon_Check_Performance_Issue] Script Date: 11/09/2018 10:48:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[mon_Check_Performance_Issue]
@in_debug tinyint = 0,
@in_NbHours tinyint = 3
AS
/*=============================================================================
Explication du traitement realise par la SP
-------------------------------------------
La SP va check un ensemble de point de performance sur l'instance
Contexte d'utilisation
----------------------
Appelé depuis le job DR92180 - Check Performance Issue
Parametres
----------
@in_debug : non utilisé
@in_NbHours : plage horaire d'analyse en heure
Creation : 09.11.18 / FLA
Modifications : 12.11.18 / FLA Correction envoi de mail avec message d'erreur
17.03.22 / FLA Change DBA mail
07.04.22 / RTC optimize perf
=============================================================================*/
set nocount on;
/*------------------- Declaration des variables --------------------*/
declare @PLE int,
@NbCount smallint,
@messageError varchar (8000),
@errno int,
@errmsg varchar(255),
@ou_code varchar (15)
/*------------ Affectation des parametres aux variables ------------*/
select @errno = 0
SET @messageError = ''
SET @errmsg = ''
/*-------------------------- Traitement ---------------------------*/
BEGIN TRY
select @ou_code = ou.OU_code
from Arizona.dbo.Bmc_application_key bapk with (nolock)
join Arizona.dbo.Bmc_application_default bapd with (nolock)
on bapd.BAPD_bmc_application_key = bapk.Bmc_application_key_ID
join Arizona.dbo.Organizational_unit ou with (nolock)
on convert (varchar, ou.organizational_unit_id) = bapd.BAPD_value
where bapk.BAPK_key = 'cvCurrentOrganizationalUnit'
/* RETRIEVE HH:MI OF WORKING HOURS */
declare @Hour_start varchar (5),
@Hour_end varchar (5)
;
select @Hour_start = isnull(dwoho.DWOHO_start_time_earliest, '07:00'),
@Hour_end = isnull(dwoho.DWOHO_end_time_latest, '21:00')
from Arizona.dbo.DBA_Working_hours dwoho with (nolock)
join Arizona.dbo.Organizational_unit ou with (nolock)
on ou.Organizational_unit_id = dwoho.DWOHO_organizational_unit
where ou.ou_code = @ou_code
;
select @PLE = CAST((CAST([value_in_use] AS INT) / 1024.0) / 4.0 * 300.0 AS INT)
from sys.configurations
WHERE name = 'max server memory (MB)'
select @NbCount = COUNT(*) from dbo.Monitoring_counter MC
inner join dbo.Monitoring_history MH
ON MH.MH_monitoring_counter = MC.Monitoring_counter_ID
where MC_name = 'Free list stalls/sec'
AND MH_datetime >= DATEADD(hour,-@in_NbHours,GETDATE())
AND MH_value >= 2
AND MH_datetime >= @Hour_start
AND MH_datetime <= @Hour_end
IF @NbCount > 5
SET @messageError = @messageError + 'WARNING Free list stalls/sec'+CHAR(13)+CHAR(10)
select @NbCount = COUNT(*) from dbo.Monitoring_counter MC
inner join dbo.Monitoring_history MH
ON MH.MH_monitoring_counter = MC.Monitoring_counter_ID
where MC_name = 'Lazy writes/sec'
AND MH_datetime >= DATEADD(hour,-@in_NbHours,GETDATE())
AND MH_value >= 20
AND MH_datetime >= @Hour_start
AND MH_datetime <= @Hour_end
IF @NbCount > 5
SET @messageError = @messageError + 'WARNING Lazy writes/sec'+CHAR(13)+CHAR(10)
select @NbCount = COUNT(*) from dbo.Monitoring_counter MC
inner join dbo.Monitoring_history MH
ON MH.MH_monitoring_counter = MC.Monitoring_counter_ID
where MC_name = 'Page reads/sec'
AND MH_datetime >= DATEADD(hour,-@in_NbHours,GETDATE())
AND MH_value >= 90
AND MH_datetime >= @Hour_start
AND MH_datetime <= @Hour_end
IF @NbCount > 15
SET @messageError = @messageError + 'WARNING Page reads/sec'+CHAR(13)+CHAR(10)
select @NbCount = COUNT(*) from dbo.Monitoring_counter MC
inner join dbo.Monitoring_history MH
ON MH.MH_monitoring_counter = MC.Monitoring_counter_ID
where MC_name = 'Page life expectancy'
AND MH_datetime >= DATEADD(hour,-@in_NbHours,GETDATE())
AND MH_value <= @PLE
AND MH_datetime >= @Hour_start
AND MH_datetime <= @Hour_end
IF @NbCount > 20
SET @messageError = @messageError + 'WARNING Page life expectancy'+CHAR(13)+CHAR(10)
select @NbCount = COUNT(*) from dbo.Monitoring_counter MC
inner join dbo.Monitoring_history MH
ON MH.MH_monitoring_counter = MC.Monitoring_counter_ID
where MC_name = 'Memory Grants Pending'
AND MH_datetime >= DATEADD(hour,-@in_NbHours,GETDATE())
AND MH_value >= 1
AND MH_datetime >= @Hour_start
AND MH_datetime <= @Hour_end
IF @NbCount > 5
SET @messageError = @messageError + 'WARNING Memory Grants Pending'+CHAR(13)+CHAR(10)
IF @messageError <> ''
BEGIN
exec aps_Send_Mail_with_template
@in_param_varchar_2 = 'DBA_operator;',
@in_job_type = 3, /* 3 = warning */
@in_param_varchar_3 = @messageError
END
/*---------------------- Traitement des erreurs ----------------------*/
END TRY
BEGIN CATCH
/* Traitement des erreurs (avec RaiseError) */
EXEC dbo.get_Error_Info @in_RaiseError = 1
END CATCH
GO