
Envoyé par
olivtone
Les UPDATE STATS après les rebuild index ne servent pas a grand chose, car les REBUILD mettent a jour les stats par défaut.
Perso je mets les UPDATE STATS pour les Stats qui ont plus de trois jours ou le nombre de lignes modifiés > 500, schédulé par un job SQL toutes a 8h du matin et a 13h ,et les stats se portent a merveille
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
DECLARE @SQL NVARCHAR(max);
SET @SQL = N'';
SELECT @SQL = @SQL + 'UPDATE STATISTICS ' + s.name +'.' + o.name + '(' + st.name +');'
FROM sys.stats AS st
LEFT OUTER JOIN sys.indexes AS i
ON st.object_id = i.object_id
AND st.name = i.name
JOIN sys.objects AS o
ON st.object_id = o.object_id
JOIN sys.schemas AS s
ON o.schema_id = s.schema_id
CROSS APPLY sys.dm_db_stats_properties (st.object_id, st.stats_id) AS sp
WHERE modification_counter > 0
AND (last_updated < DATEADD(day, -3, GETDATE())
OR rows / NULLIF(modification_counter, 0) > 0.2)
AND rows > 500;
EXEC (@SQL); |

Envoyé par
abdallah_mehdoini
Tu est sur que votre script est Fonctionnelle ?
il n y a ni l'option with fullscan ni même l'option d'échantillonnage with sample
Bonjour,
Le script d'olivtone est très intéressant, et sur ce point il est correct.
Lorsque ni l'option "SAMPLE" ni l'option "FULLSCAN" n'est précisée, l'optimiseur de requête calcul la taille d'échantillon par défaut, et ce , selon un algorithme prédéterminé. En gros :
- Si la taille de la table est inférieure ou égale à 8Mo, il effectue une analyse complète (FULLSCAN)
- Si la taille de table est strictement supérieure à 8Mo, il suit son propre algorithme, en ce sens que plus le nombre de lignes augmente, plus il réduit le taux d'échantillonnage. Le rapport entre le nombre de lignes de la table et le taux d'échantillonnage n'est pas du tout linéaire.
En revanche j'ai constaté un autre petit problème dans le script de olivtone !
Sauf erreur de ma part, il y a une inversion dans une expression
Je pense qu'il faut remplacer
rows / NULLIF(modification_counter, 0) > 0.2
par
modification_counter / NULLIF(rows, 0) > 0.2
Qui signifierait plus de 20% des lignes ont été modifiées.
et la phrase d'olivtone devrait, sauf erreur de ma part, être reformulée comme suit :
"Perso je mets les UPDATE STATS pour les Stats où :
( (datés de plus de trois jours)
OU (le pourcentage des lignes modifiées > 20%)
)
ET (ayant plus de 500 lignes)
A+
Partager