sqlschool.gr logo


Articles of SQLschool.gr Team

Monitoring CREATE INDEX Progress

Antonios Chatzipavlis
Saturday 10 February 2018

Όσοι από εμάς έχουν περάσει ή είναι DBA σε μεγάλες databases καθημερινά αντιμετωπίζουμαι πολλά ενδιαφέροντα θέματα. Ένα από αυτά είναι η συντήρηση και η δημιουργία των indexes σε μεγάλου όγκου databases. Ειδικότερα αυτό που ζητάμε είναι να γνωρίζουμε το progress της δημιουργίας ώστε να είμαστε σε θέση να εκτιμήσουμε την ολοκλήρωση της εργασίας.

Από το SQL Server 2014 (και είναι ένα λόγος να κάνει κάποιος upgrade αν είναι σε παλαιότερες εκδόσεις) έχουμε επιπλέον στα χέρια μας (εκτός του ΟNLINE option που έχουμε από το SQL Server 2012) την δυνατότητα να κάνουμε real time monitoring σε queries χρησιμοποιώντας την DMV sys.dm_exec_query_profiles η οποία αν δεν είναι γνωστό (τώρα θα είναι) είναι και η βάση του Live Query Statistics.

Για να μπορέσω να έχω την δυνατότητα να παρακολουθήσω την εξέλιξη ενός CREATE INDEX statement αρκεί πριν από την εκτέλεση του να εκτελέσω την SET STATISTICS PROFILE ON

Κατά την εκτέλεση του CREATE INDEX σε ένα άλλο Query Window μπορώ να εκτελώ το παρακάτω query το οποίο κάνει χρήση της παραπάνω DMV (καλό είναι πρώτα να δείτε τα BOL για αυτή στο link

Δεν μας ενδιαφέρουν όλα τα πεδία για την δημιουργία του index αλλά μόνο όσα αναφέρω στο query παρακάτω.


Αυτό που όμως είναι χρήσιμο να γνωρίζουμε για μπορούμε να κατανοήσουμε τα αποτελέσματα του είναι οι τιμές που θα εμφανιστούν το πεδίο physical_operator_name και οι οποίες για την δημιουργία του index αυτές που μας ενδιαφέρουν είναι οι:

TABLE SCAN / CLUSTER INDEX SCAN που σημαίνει ότι είναι στην φάση που διαβάζει όλες τι γραμμές του πίνακα στον οποίο φτιάχνουμε το index.

SORT που σημαίνει ότι είναι στην φάση που ταξινομεί τα δεδομένα του index

INDEX INSERT είναι στην φάση που κάνει insert τα rows στην περίπτωση που φτιάχνουμε clustered index. Parallelism δείχνει τον παραλληλισμό της εργασίας.

Επειδή μια τέτοια εργασία πάντα παραλληλίζει αυτό που κάνουμε είναι κάνουμε κάποιο grouping ώστε να έχουμε summarized data όπως παρακάτω.

declare @sessionid int = 56 -- change the value with your session id
       sum(row_count) as row_count, 
       sum(estimate_row_count) as estimate_row_count,
       cast(sum(row_count)*100 as float)/sum(estimate_row_count) as estimate_percent_complete
from sys.dm_exec_query_profiles   
where session_id=@sessionid  
group by node_id,physical_operator_name  
order by node_id desc;


Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios is a Data Solutions Consultant and Trainer. He has been working in IT since 1988. In his career, he has worked as senior developer, IT Manager, Solutions Architect and IT Consultant. Since 1995 he has been devoted on new technologies and software development tools, mainly by Microsoft, either by training company staff and colleagues or assisting them in design, development and implementation as a consultant or chief developer. He has focused in Databases and Data Science since 1995. He specialized in Microsoft SQL Server since version 6.0 in areas like SQL Server Internals, Database Design and Development, Business Intelligence and in 2010 he has started working with Azure Data Platform, NoSQL databases, Big Data Technologies and Machine Learning. He is an active member of many IT communities in Greece, answering colleagues' questions and writing articles in his web site. He is the owner of SQLschool.gr which is a community portal with a lot of information about Microsoft SQL Server. He has been a Microsoft Certified Trainer (MCT) since 2000. Microsoft honored him as MVP on Data Platform due to his activities in SQL Server since 2010. He holds a large number of Microsoft Certifications and Microsoft SQL Server Certifications since version 6.5.


What's New in SQL Server 2022 - Episodes

More Tips...

Become a member

If you want to receive updates from us become a member to our community.




sqlschool.gr © 2010-2024 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.