Vérifier la progression de la réorganisation / reconstruction d'alter index


17

Comment puis-je vérifier la progression / l'état lorsque je soumets une modification d'index réorganiser / reconstruire?


1
Par progrès, vous voulez dire combien de lignes d'index il a vérifiées et combien reste-t-il? Je ne pense pas que vous puissiez le faire. Votre meilleur pari est de moniteur utilise sys.dm_exec_requests DMV
Shanky

Réponses:


16

Il est vraiment difficile de dire combien de temps prendra votre reconstruction, car SQL lui-même ne sait pas vraiment à l'avance et ne peut pas vous donner d'estimation.

Vous pouvez utiliser la requête suivante pour utiliser le dmv dm_exec_requests pour afficher la durée de la reconstruction de votre index et pour vérifier que SQL n'a pas vraiment d'estimation:

SELECT r.session_id,r.command,CONVERT(NUMERIC(6,2),r.percent_complete)
AS [Percent Complete],CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time],
CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours],
CONVERT(VARCHAR(1000),(SELECT SUBSTRING(text,r.statement_start_offset/2,
CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END)
FROM sys.dm_exec_sql_text(sql_handle)))
FROM sys.dm_exec_requests r WHERE command IN ('Alter Index')

Cependant, quand il s'agit d'une estimation réelle du temps requis, vous pouvez lire ce bel article de blog de sqlmunkee, qui résume cela en disant ".. ça dépend.":

Et comme nous ne sommes pas tous sur le même matériel, en utilisant le même logiciel ou en regardant les mêmes données, la réponse doit être… .. cela dépend

Frustrant, mais vrai, malheureusement.


2
Merci pour le joli script, j'ai dû ajuster la clause where sur `` DBCC '', mais j'ai ensuite récupéré des informations, disant que le pourcentage achevé était de 6,42 et que l'ETA Min était d'environ 707 (ce qui correspond à une partition). Je garderai un œil sur la distance que cela prendra. Vérifie également le message.
nojetlag

cela fonctionne-t-il également pour les reconstructions EN LIGNE?
Simon_Weaver

1
@Simon_Weaver Devrait faire oui.
Réagit

Cela ne fonctionne que pour RÉORGANISER. Cela ne fonctionne pas pour REBUILD. Veuillez consulter la colonne "percent_complete" à l'URL suivante pour une liste complète de l'endroit où cela fonctionne. La colonne estime_completion_time tombe dans la même catégorie mais n'est pas documentée comme telle car elle est «interne uniquement». docs.microsoft.com/en-us/sql/relational-databases/…
Jeff Moden

4

J'ai réussi à trouver ce billet de blog avec un script magick qui prétendument fait la tâche, ne peut pas vérifier car cela semble ne pas fonctionner pour SQL Server 2014 que j'exécute, des blocs de requête en attente d'un verrou partagé. Peut-être que quelqu'un le trouvera utile, alors je vais le laisser ici.

;WITH cte AS
(
SELECT
object_id,
index_id,
partition_number,
rows,
ROW_NUMBER() OVER(PARTITION BY object_id, index_id, partition_number ORDER BY partition_id) as rn
FROM sys.partitions
)
SELECT
   object_name(cur.object_id) as TableName,
   cur.index_id,
   cur.partition_number,
   PrecentDone =
      CASE
         WHEN pre.rows = 0 THEN 0
      ELSE
         ((cur.rows * 100.0) / pre.rows)
      END,
   pre.rows - cur.rows as MissingRows
FROM cte as cur
INNER JOIN cte as pre on (cur.object_id = pre.object_id) AND (cur.index_id = pre.index_id) AND (cur.partition_number = pre.partition_number) AND (cur.rn = pre.rn +1)
ORDER BY 4

1

J'ai trouvé la réponse acceptée ci-dessus bonne, mais il manque une chose cruciale: l' état de la commande (par exemple, la commande est-elle bloquée)

Cette sélection simple montre le statut avant et central:

SELECT percent_complete, *
FROM sys.dm_exec_requests
WHERE session_id = <session id of alter index>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.