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

202 lines
5.8 KiB
Transact-SQL

USE [HCITools]
GO
/****** Object: StoredProcedure [perf].[Get_Performance_Status] Script Date: 02/01/2016 16:15:59 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[perf].[Get_Performance_Status]') AND type in (N'P', N'PC'))
DROP PROCEDURE [perf].[Get_Performance_Status]
GO
USE [HCITools]
GO
/****** Object: StoredProcedure [perf].[Get_Performance_Status] Script Date: 02/01/2016 16:15:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [perf].[Get_Performance_Status]
@in_debug tinyint = 0,
@in_Recipients varchar(8000) = '',
@in_SendInConsole tinyint = 1,
@in_CheckList varchar(14) = '11111111111111'
AS
/*=============================================================================
Explication du traitement realise par la SP
-------------------------------------------
Cette SP sert à appeler les SP d'analyse de performance pour la capture des traces et collecte les résultats pour leur traitement
Contexte d'utilisation
----------------------
Cette SP est appelée manuellement en cas de besoin
Parametres
----------
@in_debug : si 1, affichage de la liste des SP contenues dans la SP principale
@in_Recipients : Si vide, pas d'envoi de mail sinon contient le code ou les mails destinataires du mail
@in_SendInConsole : si 1, affichage dans la console
@in_CheckList : Contient la liste des checks à effectuer. 0 pour désactivé, 1 pour premier niveau, 2 pour 2ème niveau etc..
La position défini la SP à appeler. Ex : 11111111111111 appelle toutes les SP en niveau 1
Creation : 10.11.15 / FLA
Modifications : 17.08.2023 / SPE : OCTPDBA-726: Replace mail profile name APSSQL_MAIL_PROFILE into AzureManagedInstance_dbmail_profile to be SQL managed instances compatible
=============================================================================*/
set nocount on;
/*------------------- Declaration des variables --------------------*/
declare @html nvarchar(max),
@TableHTML nvarchar(max),
@i tinyint,
@cmd varchar(500),
@Title varchar(50),
@Details tinyint,
@in_SendInMail tinyint
declare @SPList table (
ID tinyint,
SPName varchar(50),
SPTitle varchar(50),
Details tinyint NULL)
CREATE TABLE #HTMLResult (
ID tinyint,
Result nvarchar(max)
)
/*------------ Affectation des parametres aux variables ------------*/
SET @html = '<table border="0">'
/* Déclaration des SP disponibles pour l'analyse des performances */
insert into @SPList VALUES (1,'Check_RAM','RAM', NULL)
insert into @SPList VALUES (2,'Check_CPU','CPU', NULL)
insert into @SPList VALUES (3,'Check_Disk','DISK', NULL)
insert into @SPList VALUES (4,'Check_Locks','LOCKS', NULL)
insert into @SPList VALUES (5,'Check_Replication','REPLICATION', NULL)
insert into @SPList VALUES (6,'Check_Jobs','JOBS', NULL)
insert into @SPList VALUES (7,'Check_Process','PROCESS', NULL)
insert into @SPList VALUES (8,'Check_If_Error','ERRORS', NULL)
insert into @SPList VALUES (9,'Check_Statistics','STATISTICS', NULL)
insert into @SPList VALUES (10,'Check_Index','INDEX', NULL)
insert into @SPList VALUES (11,'Check_Trace','TRACE', NULL)
insert into @SPList VALUES (12,'Check_Query','QUERY', NULL)
insert into @SPList VALUES (13,'Check_TempDB','TEMPDB', NULL)
insert into @SPList VALUES (14,'Check_Waits','WAITS', NULL)
SET @i = 1
/*-------------------------- Traitement ---------------------------*/
BEGIN TRY
/* Si @in_Recipients alors on n'envoie pas de mail */
IF @in_Recipients = ''
SET @in_SendInMail = 0
ELSE
SET @in_SendInMail = 1
/* Si mode debug, alors on affiche la liste des SP appelées */
IF @in_debug = 1
SELECT CAST(ID as varchar(2)) + ' - ' + SPName FROM @SPList ORDER BY ID
ELSE
BEGIN
/* On parcour l'ensemble des SP à traiter */
WHILE @i <> LEN(@in_CheckList)+1
BEGIN
/* Mise à jour du niveau de détails voulu par SP */
UPDATE @SPList SET Details = CAST(SUBSTRING(@in_CheckList,@i,1) as int) WHERE ID = @i
/* Récupération du titre à afficher dans la SP et du niveau de détails voulu */
SELECT @Title = SPTitle, @Details = Details FROM @SPList WHERE ID = @i
if @Details > 0
BEGIN
/* Si mode console, on affiche le titre */
IF @in_SendInConsole = 1
SELECT @Title
/* Si détail > 0 execution de chaque SP */
SELECT @cmd='EXEC [perf].'+ SPName + ' @in_SendInMail ='+CAST(@in_SendInMail as CHAR) +', @in_SendInConsole = '+CAST(@in_SendInConsole as CHAR)+', @in_Details = '+CAST(Details as CHAR)+', @in_ID = '+CAST(ID as varchar(3))+';' FROM @SPList WHERE ID = @i
EXEC(@cmd)
/* Préparation du titre en mode HTML en cas d'envoi par mail */
SET @html = @html + '<tr><td><br><h4>'+@Title+'</h4></td></tr>'
SELECT @html = @html + Result from #HTMLResult WHERE ID = @i
END
SET @i = @i+1
END
/* Envoi de mail */
if @in_SendInMail = 1
BEGIN
/* Get default mailbox profile name */
DECLARE @defaultprofilname varchar(100)
SELECT DISTINCT @defaultprofilname = p.name FROM msdb.dbo.sysmail_profile p JOIN msdb.dbo.sysmail_principalprofile pp ON pp.profile_id = p.profile_id AND pp.is_default = 1
EXEC msdb.dbo.sp_send_dbmail @recipients=@in_Recipients,
@subject = 'Compte rendu de performance',
@body = @html,
@body_format = 'HTML',
@profile_name = @defaultprofilname
END
DROP TABLE #HTMLResult
END
END TRY
BEGIN CATCH
DROP TABLE #HTMLResult
/* Traitement des erreurs (avec RaiseError) */
EXEC dbo.get_Error_Info
END CATCH
;
/*------------------ Retour au programme appelant -----------------*/
return(@@error);
GO