[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'
--Afficher les dernières mises à jour des statistiques
SELECTOBJECT_NAME(T1.object_id)AS NomTable,T1.nameAS NomIndex, T2.last_updated AS last_updated_stats, T2.modification_counter, T2.rowsAS NbreLigTable
FROMsys.indexes T1
CROSSAPPLYsys.dm_db_stats_properties(T1.object_id, T1.index_id) T2
WHEREOBJECT_SCHEMA_NAME(T1.object_id,DB_ID())<>'sys'AND T2.modification_counter > 0
ORDERBY T2.last_updated,NomTable
--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);