[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'
SELECT T2.stats_id, name nomStatistiques, filter_definition, last_updated, rows AS NombreLig, rows_sampled AS LignesEchantillonnees
, steps, unfiltered_rows, modification_counter AS [NombreTotalignesInsereesSupprimEesMisesAjourDepuisDernierUpdateStatistiquesTable]
,T1.*
FROM sys.stats AS T1
CROSS APPLY sys.dm_db_stats_properties(T1.object_id, T1.stats_id) AS T2
WHERE T1.object_id = object_id('MaTable');
SELECT OBJECT_NAME(T1.object_id) AS NomObjet,t3.type_desc,
T1.name AS NomIndex,
STATS_DATE(T1.object_id,T1.index_id) AS DateHeureStats,
T2.rowmodctr AS [NombreTotalignesInsereesSupprimEesMisesAjourDepuisDernierUpdateStatistiquesTable], TypeIndex = CASE WHEN T2.indid=0 then 'Segment de mémoire'
WHEN T2.indid=1 then 'Index cluster'
WHEN T2.indid>1 then 'Index non cluster'
ELSE 'Inconnu' END
FROM sys.indexes T1
join sys.sysindexes T2 ON T1.object_id = T2.id and T1.index_id = T2.indid
join sys.objects t3 ON t3.object_id=T1.object_id and t3.type='U'
where
OBJECT_NAME(T1.object_id) ='MaTable'
order by NomObjet,NomIndex
--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);
-- Afficher l'état des statistiques
DBCC SHOW_STATISTICS ('MaTable','MaStatistique')