Extended Events Kullanarak Online Index Rebuild İşlemlerinin Yüzde Kaçta Olduğunu Görmek
Index’leri rebuild ederken uygulamanın bundan etkilenmemesi için online rebuild özelliği SQL Server 2005 ile birlikte geldi. Fakat şahsi tecrübelerime göre SQL Server 2012’ye kadar gerçekten online olmuyor. SQL Server 2008 kullandığım zamanlarda gün içinde online rebuild index işlemini gerçekleştiremezdik. Başlattığımız rebuild işlemi sorguları kilitlerdi ve birkaç dakika sonra uygulamacılardan telefon yağmaya başlardı. Aynı şey DBCC CHECKDB içinde geçerli. SQL Server 2012 ile birlikten bunu yapabilir hale geldik. Yani gerçekten ONLINE oldu.
Online Index Rebuild işleminin başka bir sıkıntısı ise işlemin yüzde kaçta olduğunu göremememiz. Backup alırken dmw’leri kullanarak backup’ın yüzde kaçta olduğunu görebiliyoruz ve ne zaman biteceğini az çok tahmin etme şansımız oluyor. Aynı şeyi Online Index Create Rebuild işleminde dmw’leri kullanarak göremiyoruz.
Index Rebuil işleminin ne zaman biteceğini tahmin edebilmek için Extended Events Ya da Profiler’ı kullanabiliriz. Bildiğiniz gibi Extended Events, Profiler’ın yerine geldi ve Microsoft bir süre sonra Profiler’ı kaldıracak. Ama kullanıcılar Profiler kullanmaya alıştıkları için hala kaldırmadı. Biz makalemizde Extended Events ile bu işlemi gerçekleştireceğiz.
Öncelikle test amaçlı büyük bir index’i online rebuild yapmak için aşağıdaki script’i çalıştıralım.
USE [Veritabanı] GO ALTER INDEX [index_ismi] ON [şema_ismi].[tablo_ismi] REBUILD PARTITION = ALL WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) GO
Bu işlem devam ederken bu işlemin tahminen ne zaman biteceğini hesaplayacağız. SSMS üzerinden Management’a geliyoruz ve Extended Events kısmından Sessions’a sağ tıklayarak New Session Wizard diyoruz.
Gelen ekran da Do not show this page again diyerek ilerliyoruz.
Bir sonraki ekranda oluşturacağımız Extended Event Session’ına bir isim vermemiz gerekiyor. Ben OnlineIslemler ismini vererek ilerliyorum. Start the event session ar server startup’ı seçersem sql server başladığında otomatik olarak bu session başlayacaktır. Sadece ihtiyacım olduğunda çalıştıracağım için bu seçimi yapmıyorum.
Gelen ekranda Do not use template’i seçerek ilerliyorum.
Gelen ekranda Event Library kısmına online yazıyorum ve aşağıdaki listede progress report online index operation’ı gördüğümde bu event’e çift tıklayarak sağ taraftaki Selected Events’e geçtiğini görüyorum ve ilerliyorum.
Bu aşamadan sonra next next diyerek ilerliyoruz ve session’ı oluşturuyoruz.
Session’ın üzerinde sağ tıklayarak start ve watch live data diyoruz.
Index rebuild olmaya devam ederken Watch Live Data dedikten sonra gelen ekranda aşağıdaki gibi işlemin hangi satırına olduğunu görebilirsiniz. Örneğin aşağıdaki ekranda gördüğünüz gibi şu an 1380385 kayıt insert edilmiş.
Index’teki toplam kayıt sayısına bakmak için de o tablo için aşağıdaki gibi bir script çalıştırmalısınız.
exec sp_spaceused ‘[şema_ismi].[tablo_ismi]’
Aşağıda gördüğünüz ekran çıktısında benim örneğimde rebuild ettiğim tablodaki kayıt sayısını gösteriyor.
Gördüğünüz gibi tabloda yaklaşık 30 milyon kayıt varmış. Index rebuil işlemi şu anda 1 milyon 300 bin civarında ise ne zaman tamamlanır bir tahmin etme şansımız oluşmuş olur.