Défragmentation et recalcul des statistiques

Voici une procédure simplissime pour défragmenter les index fragmentés de SQL Server et recalculer toutes les statistiques. En prime, trois petites fonctions de méta données…

Retrouve le nom d’un index par son identifiant d’objet + identifiant d’index


CREATE FUNCTION dbo.sys_INDEX_NAME(@oid INT, @iid INT)
RETURNS sysname
AS
BEGIN
   RETURN (SELECT DISTINCT I.name
           FROM   sys.indexes AS I
           WHERE  I.object_id = @oid
             AND  I.index_id =  @iid);
END;
GO

Retrouve le nom de schéma associé à un objet


CREATE FUNCTION dbo.sys_SCHEMA_NAME(@oid INT)
RETURNS sysname
AS
BEGIN
   RETURN (SELECT DISTINCT S.name
           FROM   sys.schemas AS S
                  INNER JOIN sys.objects AS O
                        ON S.schema_id = O.schema_id
           WHERE  O.object_id = @oid);
END;
GO

Retrouve le nom complet d’un objet (schéma + nom)


CREATE FUNCTION dbo.sys_COMPLETE_NAME(@oid INT)
RETURNS NVARCHAR(257)
AS
BEGIN
   RETURN (SELECT DISTINCT dbo.sys_SCHEMA_NAME(@oid) +'.'  
                  + OBJECT_NAME(@oid));
END;
GO

Reconstruction des index fragmentés


DECLARE @SQL VARCHAR(max);
SET @SQL '';
SELECT  @SQL  =  @SQL + 'ALTER INDEX ' + dbo.sys_INDEX_NAME(object_id, index_id) +' ON ' +
       dbo.sys_COMPLETE_NAME(object_id) + ' REBUILD;'
FROM   sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL)
WHERE  avg_fragmentation_in_percent > 15
  AND  page_count > 8
EXEC (@SQL);

Ici nous avons choisit des index de plus de 8 pages et dont la fragmentation est de plus de 15%

Recalcul de toutes les stats


DECLARE @SQL VARCHAR(max);
SET @SQL '';
SELECT 'UPDATE STATISTICS [' + TABLE_SCHEMA + '].[' + TABLE_NAME +'] WITH FULLSCAN, ALL;'
FROM   INFORMATION_SCHEMA.TABLES
WHERE  TABLE_TYEP = 'BASE TABLE';
EXEC (@SQL);

--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence  * * * * *

MVP Microsoft SQL Server

Une réflexion au sujet de « Défragmentation et recalcul des statistiques »

Laisser un commentaire