Base de données SQL Server 2017 Enterprise CU16 14.0.3076.1
Nous avons récemment essayé de passer des tâches de maintenance par défaut de reconstruction d'index à Ola Hallengren IndexOptimize
. Les travaux de reconstruction d'index par défaut étaient en cours d'exécution depuis quelques mois sans aucun problème, et les requêtes et les mises à jour fonctionnaient avec des délais d'exécution acceptables. Après avoir exécuté IndexOptimize
sur la base de données:
EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y'
les performances étaient extrêmement dégradées. Une déclaration de mise à jour qui a IndexOptimize
pris 100 ms avant a pris 78 000 ms après (en utilisant un plan identique), et les requêtes exécutaient également plusieurs ordres de grandeur.
Comme il s'agit toujours d'une base de données de test (nous migrons un système de production depuis Oracle), nous sommes revenus à une sauvegarde et désactivés IndexOptimize
et tout est revenu à la normale.
Cependant, nous aimerions comprendre ce qui IndexOptimize
fait différemment du "normal" Index Rebuild
qui aurait pu causer cette dégradation extrême des performances afin de nous assurer de l'éviter une fois que nous serons en production. Toute suggestion sur ce qu'il faut rechercher serait grandement appréciée.
Plan d'exécution de l'instruction de mise à jour lorsqu'elle est lente. c'est-à-dire
après IndexOptimize
Plan d'exécution réel (à venir dès que possible)
Je n'ai pas pu voir de différence.
Planifiez la même requête lorsqu'elle est rapide
Plan d'exécution réel
la source
La réponse de John est la bonne solution, ce n'est qu'un ajout sur les parties du plan d'exécution modifiées et un exemple sur la façon de repérer facilement les différences avec l' explorateur de Sentry One Plan
Lorsque vous regardez tous les plans de requête lorsque vos performances ont été dégradées, vous pouvez facilement repérer les différences.
Des performances dégradées
Deux comptes de plus de 35 secondes de temps processeur et de temps écoulé
Performance attendue
Beaucoup mieux
La dégradation principale est deux fois sur cette requête de mise à jour:
le plan d'exécution de cette requête avec des performances dégradées
Le plan de requête estimé de cette requête de mise à jour a des estimations très élevées lorsque les performances ont été dégradées:
Alors qu'en réalité (le plan d'exécution réel), il doit encore faire du travail, mais pas le montant fou que les estimations montrent.
Le plus grand impact sur les performances est les deux scans et correspondances de hachage ci-dessous:
Analyse réelle des performances dégradées # 1
Analyse réelle sur les performances dégradées # 2
Le plan d'exécution de cette requête avec les performances attendues
Lorsque vous comparez cela aux estimations (ou aux chiffres réels) du plan de requête avec des performances normales attendues, les différences sont faciles à repérer.
De plus, les deux accès précédents aux tables ne se sont même pas produits:
Vous ne voyez pas cette élimination sur la jointure de hachage car l'entrée de génération (en haut) est insérée en premier dans la table de hachage. Ensuite, des valeurs nulles sont sondées dans cette table de hachage, retournant des valeurs nulles.
la source
Sans plus d'informations, nous ne pouvons que prendre des coups de couteau légèrement informés dans l'obscurité, vous devez donc modifier la question pour en fournir un peu plus. Par exemple, les plans de requête pour cette déclaration de mise à jour pour laquelle vous avez donné les délais, avant et après les opérations de maintenance d'index car les plans peuvent différer en raison des statistiques d'index ayant été mises à jour ( https://www.brentozar.com/pastetheplan / est utile pour cela, plutôt que de remplir la question avec ce qui pourrait être un énorme morceau de XML ou de donner une capture d'écran qui n'inclut pas certaines des informations pertinentes contenues dans le texte du plan).
Cependant, deux points très simples:
la source