This commit is contained in:
2024-03-07 16:52:14 +01:00
parent bb404b6ce6
commit 859a324c7e
203 changed files with 68602 additions and 0 deletions

View File

@@ -0,0 +1,171 @@
USE [HCITools]
GO
/****** Object: StoredProcedure [dbo].[mon_Collect_Stats_SP] Script Date: 23.09.2020 14:15:00 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mon_Collect_Stats_SP]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mon_Collect_Stats_SP]
GO
/****** Object: StoredProcedure [dbo].[mon_Collect_Stats_SP] Script Date: 23.09.2020 14:15:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mon_Collect_Stats_SP]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[mon_Collect_Stats_SP] AS'
END
GO
ALTER PROCEDURE [dbo].[mon_Collect_Stats_SP]
AS
/*=============================================================================
Explication du traitement realise par la SP
-------------------------------------------
La SP va stocker l'ensemble des statistiques des procédures stockées contenues dans la DMV [sys].[dm_exec_procedure_stats] et créer un historique pour chaque redémarrage du serveur
Contexte d'utilisation
----------------------
Appelé depuis le job D92030 - Collect Stats SP
Creation : 23.09.20 / FLA
Modifications : 17.03.2022 - FLA : Change DBA mail
=============================================================================*/
set nocount on;
/*------------------- Declaration des variables --------------------*/
declare @databaseID smallint,
@databasename sysname,
@restartdate datetime,
@actualdate datetime,
@sql nvarchar(4000),
@messageError varchar (8000),
@errno int,
@errmsg varchar(255)
/*------------ Affectation des parametres aux variables ------------*/
select @RestartDate = MIN(login_time)
from sys.sysprocesses
select @actualdate = GETDATE()
select @errno = 0
SET @messageError = ''
SET @errmsg = ''
IF EXISTS (SELECT type FROM master.cfg.InstanceContext WHERE type = 'PROD')
BEGIN
/*-------------------------- Traitement ---------------------------*/
BEGIN TRY
DECLARE c_databases CURSOR FAST_FORWARD FOR
select database_id, name
from sys.databases
where database_id > 4
open c_databases
FETCH NEXT FROM c_databases
into @databaseID, @databasename
/* On parcourt chaque base de données pour récuperer les informations des index */
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
SET @sql = 'insert into dbo.Stats_SP (SS_schemaname,SS_databasename,SS_name,SS_type,SS_execution_count,SS_last_execution_time,SS_total_worker_time,SS_total_physical_reads,SS_total_logical_writes,SS_total_logical_reads,SS_total_elapsed_time,SS_updatedate,SS_restartdate)
select OBJECT_SCHEMA_NAME(sp.object_id,'+ CAST(@databaseID AS nvarchar(4)) +'),'''+ @databasename +''',sp.name,sp.type_desc, null, null, null ,null ,null ,null, null, CAST('''+ CONVERT(nvarchar(30),@actualdate,126) +''' as datetime), CAST('''+ CONVERT(nvarchar(30),@RestartDate,126) +''' as datetime)
from '+ @databasename +'.sys.procedures sp
WHERE NOT EXISTS (select *
from dbo.Stats_SP as SS
where ISNULL(SS.SS_name,'''') COLLATE SQL_Latin1_General_CP1_CI_AS = ISNULL(sp.name,'''') COLLATE SQL_Latin1_General_CP1_CI_AS
and SS.SS_databasename COLLATE SQL_Latin1_General_CP1_CI_AS = '''+ @databasename +''' COLLATE SQL_Latin1_General_CP1_CI_AS
and SS.SS_schemaname COLLATE SQL_Latin1_General_CP1_CI_AS = OBJECT_SCHEMA_NAME(sp.object_id,'+ CAST(@databaseID AS nvarchar(4)) +') COLLATE SQL_Latin1_General_CP1_CI_AS
and SS_updatedate > CAST('''+ CONVERT(nvarchar(30),@RestartDate,126) +''' as datetime))'
EXEC(@sql)
/* On met à jour les stats des SP dans la table dbo.Stats_SP */
SET @sql = N'UPDATE dbo.Stats_SP SET SS_execution_count = eps.execution_count,
SS_last_execution_time = eps.last_execution_time,
SS_total_worker_time = eps.total_worker_time,
SS_total_physical_reads = eps.total_physical_reads,
SS_total_logical_writes = eps.total_logical_writes,
SS_total_logical_reads = eps.total_logical_reads,
SS_total_elapsed_time = eps.total_elapsed_time,
SS_updatedate = CAST('''+ CONVERT(nvarchar(30),@actualdate,126) +''' as datetime)
FROM (SELECT sp.object_id,sp.name,SUM(eps.execution_count) execution_count,
MAX(eps.last_execution_time) last_execution_time,
SUM(eps.total_worker_time) total_worker_time,
SUM(eps.total_physical_reads) total_physical_reads,
SUM(eps.total_logical_writes) total_logical_writes,
SUM(eps.total_logical_reads) total_logical_reads,
SUM(eps.total_elapsed_time) total_elapsed_time
FROM [sys].[dm_exec_procedure_stats] eps
INNER JOIN '+ @databasename + '.sys.procedures sp
ON sp.object_id = eps.object_id
AND eps.database_id = '+ CAST(@databaseID AS nvarchar(4)) +'
GROUP BY sp.object_id,sp.name) as eps
WHERE ISNULL(SS_name,'''') COLLATE SQL_Latin1_General_CP1_CI_AS = ISNULL(eps.name,'''') COLLATE SQL_Latin1_General_CP1_CI_AS
AND SS_databasename COLLATE SQL_Latin1_General_CP1_CI_AS = '''+ @databasename +''' COLLATE SQL_Latin1_General_CP1_CI_AS
AND SS_schemaname COLLATE SQL_Latin1_General_CP1_CI_AS = OBJECT_SCHEMA_NAME(eps.object_id,'+ CAST(@databaseID AS nvarchar(4)) +') COLLATE SQL_Latin1_General_CP1_CI_AS
AND SS_updatedate > CAST('''+ CONVERT(nvarchar(30),@RestartDate,126) +''' as datetime)'
EXEC(@sql)
END TRY
BEGIN CATCH
select @messageError = @messageError + 'Collect_Stats_SP failed : ' + @databasename + ' ' + ERROR_MESSAGE() + CHAR(13)
SET @errno = @errno + 1
END CATCH
FETCH NEXT FROM c_databases
into @databaseID, @databasename
END
CLOSE c_databases
DEALLOCATE c_databases
/* S'il y a une erreur, on envoie un mail aux DBA */
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
RAISERROR ('Erreur dans la SP [dbo].[mon_Collect_Stats_SP]',16,1)
END
/*---------------------- Traitement des erreurs ----------------------*/
END TRY
BEGIN CATCH
/* Traitement des erreurs (avec RaiseError) */
EXEC dbo.get_Error_Info @in_RaiseError = 1
END CATCH
END
GO