sync
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user