SQL Server 2017 Online Index Rebuild Yeniliği

Reading Time: 3 minutes

SQL Server 2017 versiyonu ile hayatımıza giren bir diğer özellik ise Index Rebuild operasyonları ile ilgilidir.

Genel de sistemlerimiz de en büyük problemlerimizin başında gece Index lerimizi bakıma aldığımızda gün içerisinde yani operasyonun yoğun olduğu saatlere sarkması ile ilgiliydi. SQL Server 2017 versiyonu ile bu süreci kontrol altına alabiliyoruz. Index REBUILD işlemlerimizi artık durdurabilir veya iptal edebiliriz. REBUILD operasyonuna gelen PAUSE,ABORT ve RESUME komutlarımız ile kontrolü elimize alabiliyoruz.

Syntax ımız ise aşağıda i gibidir.

Yapacağımız demo ile bunu daha iyi göreceğiz.

Tablomuz üzerinde ki Clustered Index bilgimizi aşağıda ki sorgumuz ile öğreniyoruz.

Sales.InvoiceLines tablomuz üzerinde ki Clustered ındex bilgimize eriştik.

Daha sonra bir Session açıyoruz ve o session da Index ‘imizi Rebuild eden scriptimizi aşağıda ki gibi hazırlayarak EXEC ediyoruz.

Daha sonra ise aynı anda başka bir Session da da bu Rebuild işlemini durduracak PAUSE scriptini aşağıdaki gibi hazırlayıp, Rebuild scripti Executiong mode da yani çalışıyorken diğer sessionda ki PAUSE scriptini EXEC edip REBUILD session ını gözlemleyeceğiz.

PAUSE scriptimizi çalıştırdık ve şimdi REBUILD Session ımıza bakıyoruz.

 

Evet gördüğünüz üzere aşağıda ki hatayı bize döndürdü Rebuild işlemi yaptığımız script.

Msg 1219, Level 16, State 1, Line 1

Your session has been disconnected because of a high priority DDL operation.

Msg 1219, Level 16, State 1, Line 1

Your session has been disconnected because of a high priority DDL operation.

Msg 596, Level 21, State 1, Line 0

Cannot continue the execution because the session is in the kill state.

Msg 0, Level 20, State 0, Line 0

A severe error occurred on the current command.  The results, if any, should be discarded.

Rebuild işlemimizi diğer sessionda PAUSE etmeye çalıştık ve gördüğünüz üzere bu süreci başarılı yaptığımızı görmüş olduk.

Şimdi ise Resume etmemiz gereken Index lerimizi sorgulayalım ve PAUSE ettiğimiz index imizin oraya düşüp düşmediğini kontorl edelim.

 

Evet Index imizin STATE ini PAUSED olarak görmekteyiz. {6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}33 ü Complete olduğunda durdurduğumuzu buradan görmekteyiz.

Şimdide şöyle bir deney yapalım. PAUSED ettiğimiz Index imizi DROP etmeyi deneyelim. Bakalım REBUILD işlemi yarıda kesilmiş Index leri DROP edebiliyor muyuz ?

Gördüğünüz üzere bu Indexi kaldıramayacağımızı hata dönerek hata detayında bize aktardı.

Peki durdurduğumuz Index imizi REBUILD işlemine devam ettirelim.

RESUME işlemini gerçekleştirdikten sonra , işlemimizin teyidini almak için sorgulamamızı tekrar yapalım.

Evet, artık index imizin başarılı bir şekilde Rebuild işlemini sağlıklı bir şekilde yapıldığını sorgumuz sonucunda veri dönmemesinden dolayı anlıyoruz.

PAUSE işlemi ile Rebuild işlemlerimizi durdururken diğer yandan direkt Rebuild işlemimizi iptalde edebiliriz. Bunun için ABORT özelliğini kullanırız.

PAUSE demomuzun aynısını ABORT özelliği ile gerçekleştirelim. Bir sessionda Index Rebuild işlemi yaparken ,

Diğer Session da da bu işlemi iptal edelim ABORT komutu ile ,

ABORT işlemimizi aynı anda EXEC ettiğimizde REBUILD session ına gidiyoruz ve transaction ın iptal olduğunu görüyoruz.

Şimdi işlemin yarıda kalmadığının teyidini yapmak için ,

Sorgumuzun sonucunda Abort ettiğimiz Index imizin dönmediğini görerek teyidi alıyoruz.

Kolay Gelsin.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *