Sepetiniz

Fail Eden Index’leri Kaldığı Yerden Devam Ettirin(Resumable Index)

Resumable Index hayatımıza SQL Server 2017 ile birlikte girdi.

 

Index’leri online rebuild ederken failover, disk yetmezliği, manual durdurma(PAUSE) gibi nedenlerden dolayı index rebuild işlemi fail olabiliyordu. Bu tip durumlarda fail olduktan sonra rebuild işleminin kaldığı yerden devam etmesi için index’i RESUMABLE=ON şeklinde işaretlemeniz gerekiyor.

 

Aşağıdaki script yardımıyla index’i resumable hale getirebilirsiniz.

ALTER INDEX IndexIsmi on TabloIsmi REBUILD WITH (ONLINE=ON,RESUMABLE=ON) ;

 

ONLINE=ON’u script’e eklemezseniz aşağıdaki gibi hata alırsınız.

 

Msg 11438, Level 15, State 1, Line 3

The RESUMABLE option cannot be set to ‘ON’ when the ONLINE option is set to ‘OFF’.

 

Aşağıda index rebuild işlemini pause eden kodu bulabilirsiniz.

 

ALTER INDEX IndexIsmi ON TabloIsmi PAUSE ;

 

Aşağıda, yukarda belirttiğim nedenlerden dolayı pause olmuş bir Index Rebuild işlemini devam ettirebileceğiniz sorguyu bulabilirsiniz.

 

Ayrıca Index rebuild işlemini diyelim ki maxdop ile başlatmadınız. Durdurup resume ederken maxdop seviyesini değiştirerek sorgunun paralellik seviyesini artırıp işlemin daha hızlı bitmesini sağlayabilirsiniz.

 

ALTER INDEX IndexIsmi ON TabloIsmi RESUME WITH (MAXDOP=4)

 

Aşağıdaki sorguda da Index’i Resume ederken başka ayarlar da yapıyoruz. Sorgudaki diğer ayarlar için “WAIT_AT_LOW_PRIORITY ile Online Index Rebuild ve Partition Switch İşlemlerini Kontrol Edin” isimli makaleyi okumanızı tavsiye ederim.

 

ALTER INDEX IndexIsmi ON TabloIsmi  RESUME WITH (MAXDOP=2, MAX_DURATION= 240 MINUTES,
WAIT_AT_LOW_PRIORITY (MAX_DURATION=10, ABORT_AFTER_WAIT=BLOCKERS)) ;

 

Aşağıdaki sorgu yardımıyla da pause durumda olan ya da çalışan index rebuild işlemini durdurabiliyoruz.

 

ALTER INDEX IndexIsmi ON TabloIsmi ABORT ;

 

 

SORT_IN_TEMPDB=ON ifadesi RESUMABLE index’lerde desteklenmiyor.

 

Disable edilmiş index’lerin rebuild işlemini RESUMABLE ile yapamıyoruz.

 

WAIT_AT_LOW_PRIORITY ile Online Index Rebuild ve Partition Switch İşlemlerini Kontrol Edin

WAIT_AT_LOW_PRIORITY SQL Server 2014 ile beraber gelen bir özelliktir. Online Index Rebuild ve switch partition işlemlerini yaparken süreci kontrol edebiliyoruz.

 

Örneğin Online Index Rebuild işlemi yaptığımızı düşünelim. Online Index Rebuild işlemi bir transaction tarafından lock’lanabilir. Ve bu şekilde uzun bir süre işlem tamamlanmayabilir. 

 

Mesela bir uygulama geliştirici bir transaction açtı ve commit işlemini gerçekleştirmedi. Online Index Rebuild işlemi bu commit gerçekleşene kadar lock’ta bekleyebilir. WAIT_AT_LOW_PRIORITY ile bunu önleyebiliyoruz.

 

Aşağıdaki sorguyu inceleyelim.

WAIT_AT_LOW_PRIORITY ‘den sonra MAX_DURATION = 1 MINUTES kısmında online index rebuild işlemi lock’lı kalırsa 1 dakika beklemesini, ABORT_AFTER_WAIT = SELF kısmında da, 1 dakika bekledikten sonra online index rebuild işlemini cancel etmesini söylemiş oluyoruz.

 

SELF yerine,

 

NONE yapsaydık online rebuild index işlemi devam edecekti.

 

BLOCKERS yapsaydık da online index rebuild işlemini lock’layan sorgu kill edilecekti.

ALTER INDEX IndexIsmi
ON dbo.TabloIsmi
REBUILD WITH (ONLINE = ON (
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 1 MINUTES, ABORT_AFTER_WAIT = SELF ))
 );

 

 

Aşağıdaki gibi de switch partition’da kullanabilirsiniz. Switch partition ile ilgili “Sliding Window-Switch Partition-Split Range-Merge Range” isimli makaleyi okumak isteyebilirsiniz.

ALTER TABLE [VeritabaniIsmi].[dbo].[TabloIsmi] 
SWITCH PARTITION 12 TO [VeritabaniIsmi].[dbo].[TabloIsmiArsiv]
WITH (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 1 MINUTES, ABORT_AFTER_WAIT = SELF));