[SQL Server] Divers Requêtes pour gérer les statistiques

--Afficher les dernières mises à jour des statistiques pour les tables Table1 et Table2

SELECT OBJECT_NAME(object_id) AS NomTable, name AS NomIndex,

 STATS_DATE(object_id,index_id) AS DateHeureStats

FROM sys.indexes

WHERE OBJECT_NAME(object_id) IN('Table1','Table2')

 

--Afficher les dernières mises à jour des statistiques pour les Index idx_index_1 et idx_index_2

SELECT OBJECT_NAME(t1.object_id) AS NomTable,

t1.name AS NomIndex,

 STATS_DATE(t1.object_id,t1.index_id) AS DateHeureStats,

 t2.rowmodctr

FROM sys.indexes t1

inner join sys.sysindexes t2

ON t1.object_id = t2.id and

t1.index_id = t2.indid

WHERE t1.name = 'ix_index_1'

 

--Vérifier si les statistiques sont activés pour Table1

EXEC sp_autostats'Table1'

 

--Activer les statistiques pour Table1

EXEC sp_autostats'Table1', 'ON'

 

--Désactiver les statistiques pour Table1

EXEC sp_autostats'Table1', 'OFF'

 

--Lancer les statistiques pour toutes les tables de la base de données.

EXEC sp_updatestats'BaseDonnee1'

 

--Recalcul de toutes les statistiques

DECLARE @tTables table (NomTable sysname)

 DECLARE @TableTraitee sysname ,

 @csInstruction nvarchar (max)

 SET NOCOUNT ON

INSERT INTO @tTables

 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

 WHERE table_name is not null and

 table_name not in('tableTest')

ORDER BY TABLE_NAME

WHILE (1=1)

 BEGIN

 set @TableTraitee = null

 SELECT TOP 1 @TableTraitee = NomTable FROM @tTables

IF @TableTraitee is null

 BREAK

 PRINT 'Début de traitement des statistiques de la table ' +

@TableTraitee

 set @csInstruction = 'UPDATE STATISTICS [' + @TableTraitee + '] with

fullscan '

 EXEC SP_EXECUTESQL@csInstruction

DELETE FROM @tTables WHERE NomTable = @TableTraitee

END

-- Réinitialiser les statistiques d'attente pour l'instance de SQL Server

DBCC SQLPERF("sys.dm_os_wait_stats",CLEAR);

-- Réinitialiser les statistiques des verrous pour l'instance de SQL Server

DBCC SQLPERF("sys.dm_os_latch_stats",CLEAR);