sqlschool.gr logo

articles

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 παρακάτω.


img1

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

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

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

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

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


img2
declare @sessionid int = 56 -- change the value with your session id
select   
       node_id,
       physical_operator_name, 
       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;

//antonch


Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios Chatzipavlis is a highly experienced Data Solutions Consultant and Trainer. He has been working in the IT industry since 1988, holding various roles such as senior developer, IT Manager, Data & AI Solutions Architect and Consultant.

Since 1995, Antonios has focused on modern technologies and software development tools, primarily by Microsoft. He has specialized in Data & AI since 2000, with expertise in Microsoft Data Platform (SQL Server, Azure SQL Databases, Azure Synapse Analytics, Microsoft Fabric, Power BI, AI) and Databricks.

Antonios is also a Microsoft Certified Trainer (MCT) for over 25 years, has been recognized as a Microsoft Most Valuable Professional (MVP) in Data Platform since 2010 and he is in the Data Expert 40 Powerlist 2024 by Boussias. He is the co-founder and visionary behind XLYTiCA, a company dedicated to Data & AI solutions.

Episode

Task Flows in Microsoft Fabric

image

More Episodes...

Tip

Get Certified: Become a Fabric Data Engineer

More Tips...

Become a member

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

Connect

Explore

Learn


sqlschool.gr © 2010-2025 All rights reserved

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