Aracılığıyla paylaş


Devam ettirilebilen tablo ekleme kısıtlamaları

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri Microsoft Fabric'teAzure SQL VeritabanıAzure SQL Yönetilen Örneği SQL veritabanı

Çevrimiçi dizin oluşturma ve yeniden derleme için devam ettirilebilen işlem SQL Server 2019, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği için zaten desteklenmektedir. Devam ettirilebilen işlemler, tablo çevrimiçiONLINE=ON () olduğunda dizin işlemlerinin yürütülmesine olanak sağlar ve ayrıca:

  • Bakım penceresine sığacak şekilde dizin oluşturma veya yeniden oluşturma işlemini birkaç kez duraklatma ve yeniden başlatma

  • Veritabanı yük devretmeleri veya disk alanının bitmesi gibi dizin oluşturma veya yeniden oluşturma hatalarından kurtarma.

  • Dizin oluşturma veya yeniden oluşturma işlemi sırasında işlem günlüklerinin kesilmesini etkinleştirin.

  • Dizin işlemi duraklatıldığında, hem özgün dizin hem de yeni oluşturulan dizin disk alanı gerektirir ve Veri İşleme Dili (DML) işlemleri sırasında güncelleştirilmiş olması gerekir.

SQL Server 2022, SQL Veritabanı ve SQL Yönetilen Örneği için yeni uzantılar, Data Definition Language (DDL) komutu olan ALTER TABLE ADD CONSTRAINT için devam ettirilebilir bir işlem yapılmasına olanak tanır ve bir Birincil veya Benzersiz Anahtar eklemeyi sağlar. Birincil veya Benzersiz Anahtar ekleme hakkında daha fazla bilgi için bkz. ALTER TABLE table_constraint.

Uyarı

Devam ettirilebilen ekleme tablosu kısıtlamaları yalnızca BİRİnCİl ANAHTAR ve BENZERSİz ANAHTAR kısıtlamaları için geçerlidir. YABANCI ANAHTAR kısıtlamaları için sürdürülerek ekleme yapılabilen tablo kısıtlamaları desteklenmez.

Devam ettirilebilen işlemler

SQL Server'ın önceki sürümlerinde, ALTER TABLE ADD CONSTRAINT işlem seçeneğiyle ONLINE=ON yürütülebilir. Ancak, büyük bir tablonun tamamlanması birkaç saat sürebilir ve çok sayıda kaynak tüketebilir. Bu tür yürütme sırasında hata veya kesinti olasılığı da vardır. Kullanıcıların bir bakım penceresi sırasında işlemi duraklatması veya bir yürütme hatası sırasında kesintiye uğradığı yerden, işlemi baştan başlatmak zorunda kalmadan yeniden başlatabilmesi için ALTER TABLE ADD CONSTRAINT'a devam edebilir özellikler ekledik.

Desteklenen senaryolar

için ALTER TABLE ADD CONSTRAINT yeni devam ettirilebilir özellik aşağıdaki müşteri senaryolarını destekler:

  • Çalıştırılan ALTER TABLE ADD CONSTRAINT operasyonunu, örneğin bir bakım penceresi için duraklatarak veya bakım penceresi tamamlandıktan sonra operasyonu sürdürebilirsiniz.

  • Yük devretmeler ve sistem hatalarından sonra ALTER TABLE ADD CONSTRAINT işlemi yeniden başlat.

  • Küçük bir günlük boyutu mevcut olmasına rağmen büyük bir tabloda ALTER TABLE ADD CONSTRAINT işlemi yürütülüyor.

Uyarı

ALTER TABLE ADD CONSTRAINT için devam ettirilebilir işlem, komutun ALTER çevrimiçi (WITH ONLINE = ON) yürütülmesini gerektirir.

Bu özellik özellikle büyük tablolar için kullanışlıdır.

ALTER TABLE için T-SQL Sözdizimi

Tablo kısıtlamasında devam ettirilebilir işlemleri etkinleştirmek için kullanılan söz dizimi hakkında bilgi için ALTER TABLE (Transact-SQL) içindeki söz dizimine ve seçeneklere bakın.

ALTER TABLE için açıklamalar

  • Geçerli T-SQL söz dizimine < komutunda WITH resumable_options yeni bir yan tümce eklendi.

  • RESUMABLE seçeneği yenidir ve var olan ALTER TABLE (Transact-SQL) söz dizimine eklenmiştir.

  • MAX_DURATION = ileRESUMABLE = ON kullanılan [DAKİkA] süresi (gerektirir ONLINE = ON). MAX_DURATION , duraklatılmadan önce devam ettirilebilen çevrimiçi ekleme kısıtlama işleminin yürütüldüğünü gösterir (dakika cinsinden belirtilen tamsayı değeri). Belirtilmezse, işlem tamamlanmadan devam eder.

ALTER INDEX için T-SQL söz dizimi

ALTER TABLE ADD CONSTRAINT için yeniden başlatılabilir tablo kısıtlama işlemini duraklatmak, sürdürmek veya iptal etmek için T-SQL söz dizimi ALTER INDEX (Transact-SQL) kullanın.

Devam ettirilebilen kısıtlamalar için var olan ALTER INDEX ALL komutu kullanılır.

ALTER INDEX ALL ON <table_name>  
      { RESUME [WITH (<resumable_index_options>,[...n])]
        | PAUSE
        | ABORT
      }
<resumable_index_option> ::=
 { 
    MAXDOP = max_degree_of_parallelism
    | MAX_DURATION =<time> [MINUTES]
    | <low_priority_lock_wait>  
 }
 <low_priority_lock_wait>::=  
{  
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,   
                          ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )  
}  

ALTER INDEX için açıklamalar

ALTER INDEX ALL ON <Table> PAUSE

  • Yürütülmekte olan bir çevrimiçi ve devam ettirilebilir bir tabloya kısıtlama ekleme işlemini duraklatma

ALTER INDEX ALL ON <Table> RESUME [WITH (<resumable_index_options>,[...n])]

  • El ile veya hata nedeniyle duraklatılan tabloya kısıtlama ekleme işlemini sürdürebilirsiniz.

MAX_DURATION ile kullanılır RESUMABLE=ON

  • Devam ettirilebilir tablo ekleme kısıtlama işleminin sürdürüldükten sonra yürütülme zamanı (dakika cinsinden belirtilen tamsayı değeri). Süre dolduğunda, devam ettirilebilir bir işlem hala çalışıyorsa, duraklatılır.

WAIT_AT_LOW_PRIORITY ile RESUMABLE=ON ve ONLINE = ON kullanılır

  • Bir duraklamadan sonra çevrimiçi tabloya kısıtlama ekleme işleminin devam edebilmesi için, bu tabloda engelleme işlemlerini beklemelidir. WAIT_AT_LOW_PRIORITY , tablo kısıtlaması ekleme işleminin düşük öncelikli kilitleri bekleyeceğini ve devam ettirilebilir işlem beklerken diğer işlemlerin devam etmelerine olanak tanıyacağını gösterir. WAIT_AT_LOW_PRIORITY seçeneğinin atlanması, WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)eşdeğerdir. Daha fazla bilgi için bkz. WAIT_AT_LOW_PRIORITY.

ALTER INDEX ALL ON <Table> ABORT

  • Devam ettirilebilir olarak bildirilen çalışan veya duraklatılmış bir tablo ekleme kısıtlama işlemini iptal edin. Durdurulabilir bir kısıtlama işlemini sonlandırmak için durdurma işleminin açıkça bir ABORT komut olarak yürütülmesi gerekir. Devam ettirilebilir bir tablo kısıtlama işlemi başarısız veya duraklatılırsa yürütme sonlandırılmaz. Bunun yerine, işlemi süresiz duraklatılmış durumda bırakır.

Devam ettirilebilen işlemler için kullanılabilen , PAUSEve RESUME seçenekleri hakkında ABORTdaha fazla bilgi için bkz. ALTER INDEX (Transact-SQL).

Devam ettirilebilen işlemin durumunu görüntüleme

Devam ettirilebilen tablo kısıtlama işleminin durumunu görüntülemek için görünüm sys.index_resumable_operations kullanın.

Permissions

Tabloda ALTER izin gerektirir.

Devam ettirilebilir ALTER TABLE ADD CONSTRAINT için yeni izin gerekmez.

Örnekler

Aşağıda, devam ettirilebilir tablo ekleme kısıtlama işlemlerini kullanmayla ilgili bazı örnekler verilmiştir.

Örnek 1

240 dakikalık ALTER TABLE ile (a) sütununda kümelenmiş bir birincil anahtar eklemek için devam ettirilebilen MAX_DURATION işlemi.

ALTER TABLE table1
ADD CONSTRAINT PK_Constrain PRIMARY KEY CLUSTERED (a)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);

Örnek 2

Devam ettirilebilir ALTER TABLE işlem ile 240 dakikalık süre içinde iki sütun (a ve b) üzerinde benzersiz bir kısıtlama MAX_DURATION ekleme.

ALTER TABLE table2
ADD CONSTRAINT PK_Constrain UNIQUE CLUSTERED (a,b)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);

Örnek 3

ALTER TABLE duraklatılmakta ve sürdürülmekte olan kümelenmiş birincil anahtar ekleme işlemi.

Aşağıdaki tabloda, aşağıdaki T-SQL deyimleri kullanılarak kronolojik olarak yürütülen iki oturum (Session #1 ve Session #2) gösterilmektedir. Session #1, Col1 sütununda birincil anahtar oluşturarak sürdürülebilir bir ALTER TABLE ADD CONSTRAINT işlemi yürütür. Session #2 çalıştırma kısıtlaması için yürütme durumunu denetler. Bir süre sonra tekrar kullanılabilir işlemi duraklatır. Session #2 duraklatılmış kısıtlamanın durumunu denetler. Son olarak, Session #1 duraklatılan kısıtlamayı sürdürür ve Session #2 durumu yeniden denetler.

Oturum #1 Oturum #2
Devam ettirilebilir ekleme kısıtlamasını yürütme

ALTER TABLE TestConstraint
ADD CONSTRAINT PK_TestConstraint PRIMARY KEY (Col1)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 30);
Kısıtlama durumunu denetleme

SELECT sql_text, state_desc, percent_complete
FROM sys.index_resumable_operations;
İşlemi gösteren çıkış

sql_text state_desc tamamlanma_yüzdesi
ALTER TABLE TestConstraint (...)KOŞARAK43.552
Devam ettirilebilen kısıtlamayı duraklatma

ALTER INDEX ALL ON TestConstraint PAUSE;
Error

Msg 1219, Level 16, State 1, Line 6
Your session has been disconnected because of a high priority DDL operation.

Msg 1750, Level 16, State 1, Line 6
Could not create constraint or index. See previous errors.

Msg 0, Level 20, State 0, Line 5
A severe error occurred on the current command.
The results, if any, should be discarded.
Kısıtlama durumunu denetleme

SELECT sql_text, state_desc, percent_complete
FROM sys.index_resumable_operations;
İşlemi gösteren çıkış

sql_text state_desc percent_complete
ALTER TABLE TestConstraint (...)DURAKLATILDI65.339
ALTER INDEX ALL ON TestConstraint RESUME;
Kısıtlama durumunu denetleme

SELECT sql_text, state_desc, percent_complete
FROM sys.index_resumable_operations;
İşlemi gösteren çıkış

sql_text state_desc tamamlanma_yüzdesi
ALTER TABLE TestConstraint (...)KOŞARAK90.238

İşlem tamamlandıktan sonra kısıtlamayı denetlemek için aşağıdaki T-SQL deyimini yürütür:

SELECT constraint_name, table_name, constraint_type 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY';
GO

Sonuç kümesi aşağıdadır:

constraint_name tablo_adı kısıtlama_türü
PK_Kısıtlaması TestConstraint BİRİNCİL ANAHTAR

Ayrıca bakınız