Blog
Friday, 27. December 2019

Wie verfolge ich den Fortschritt des Befehls CREATE INDEX?

Benedikt
Inhaber & Geschäftsführer

Wie können Sie den Fortschritt überprüfen beim Erstellen eines Indexes?

  • !! Sie müssen SET STATISTICS PROFILE ON hinzufügen. oder SET STATISTICS XML ON; In dem Abfrage-Batch, der den CREATE INDEX ausführt (und vor der CREATE INDEX-Anweisung steht, falls dies nicht offensichtlich war), werden in dieser DMV für diese SPID / session_id keine Zeilen angezeigt !!
  • Der IN-Operator wird verwendet, um die Indexeinfügezeile herauszufiltern, die, falls enthalten, die TotalRows-Werte erhöht, wodurch die Berechnungen verzerrt werden, da in dieser Zeile keine verarbeiteten Zeilen angezeigt werden.
  • Die hier angezeigte Zeilenzahl (dh TotalRows) ist doppelt so hoch wie die Zeilenzahl der Tabelle, da zwei Schritte ausgeführt werden, von denen jeder für alle Zeilen ausgeführt wird: der erste ist ein “Table Scan” oder “Clustered Index Scan” und der zweite ist die “Sortierung”. Sie sehen “Table Scan”, wenn Sie einen Clustered Index oder einen NonClustered Index auf einem Heap erstellen. Sie sehen “Clustered Index Scan”, wenn Sie einen NonClustered Index für einen Clustered Index erstellen.
DECLARE @SPID INT = 51;

;WITH agg AS
(
     SELECT SUM(qp.[row_count]) AS [RowsProcessed],
            SUM(qp.[estimate_row_count]) AS [TotalRows],
            MAX(qp.last_active_time) - MIN(qp.first_active_time) AS [ElapsedMS],
            MAX(IIF(qp.[close_time] = 0 AND qp.[first_row_time] > 0,
                    [physical_operator_name],
                    N'<Transition>')) AS [CurrentStep]
     FROM sys.dm_exec_query_profiles qp
     WHERE qp.[physical_operator_name] IN (N'Table Scan', N'Clustered Index Scan',
                                           N'Index Scan',  N'Sort')
     AND   qp.[session_id] = @SPID
), comp AS
(
     SELECT *,
            ([TotalRows] - [RowsProcessed]) AS [RowsLeft],
            ([ElapsedMS] / 1000.0) AS [ElapsedSeconds]
     FROM   agg
)
SELECT [CurrentStep],
       [TotalRows],
       [RowsProcessed],
       [RowsLeft],
       CONVERT(DECIMAL(5, 2),
               (([RowsProcessed] * 1.0) / [TotalRows]) * 100) AS [PercentComplete],
       [ElapsedSeconds],
       (([ElapsedSeconds] / [RowsProcessed]) * [RowsLeft]) AS [EstimatedSecondsLeft],
       DATEADD(SECOND,
               (([ElapsedSeconds] / [RowsProcessed]) * [RowsLeft]),
               GETDATE()) AS [EstimatedCompletionTime]
FROM   comp;

Interesse geweckt?

Unsere Expert:innen stehen Ihnen bei allen Fragen rund um Ihre IT Infrastruktur zur Seite.

Kontaktieren Sie uns gerne über das Kontaktformular und vereinbaren ein unverbindliches Beratungsgespräch mit unseren Berater:innen zur Bedarfsevaluierung. Gemeinsam optimieren wir Ihre Umgebung und steigern Ihre Performance!
Wir freuen uns auf Ihre Kontaktaufnahme!

Taunusstraße 72
55118 Mainz
info@madafa.de
+49 6131 3331612
Bürozeiten
Montag bis Donnerstag:
9:00 - 17:00 Uhr MEZ

Freitags:
9:30 - 14:00 Uhr MEZ
Wir sind Ihre SQL Expert:innen!
Noch Fragen? - Wir haben immer die passende Antwort für Sie!