KB3168793 - PERBAIKI: Tidak dapat membuat atau menghapus tabel atau indeks ketika transaksi DDL lain berjalan di database yang sama di SQL Server 2016

Berlaku Untuk
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Gejala

Saat Anda menjalankan operasi DDL seperti membuat indeks atau memotong tabel di SQL Server 2016, operasi mungkin diblokir jika ada transaksi DDL lain yang berjalan di database yang sama.

Resolusi

Masalah pertama kali diperbaiki dalam pembaruan kumulatif SQL Server berikut:

Rekomendasi: Menginstal pembaruan kumulatif terbaru untuk SQL Server

Setiap pembaruan kumulatif baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Kami menyarankan Anda mengunduh dan menginstal pembaruan kumulatif terbaru untuk SQL Server:

      

Informasi Selengkapnya

Saat DDL membuat atau menghapus tabel atau indeks, DDL perlu menyisipkan atau menghapus id kumpulan baris tabel atau indeks dari sysrowsets, yang harus menampung kunci X tingkat baris pada entri. Ketika ini dilakukan di dalam transaksi, kunci X akan ditahan selama durasi transaksi.

Ketika Tuple Mover menemukan buffer penghapusan yang dapat dihapus, Tuple Mover perlu melakukan iterasi pada sysrowset untuk menemukan tabel atau indeks yang ada. Untuk membaca setiap baris dari sysrowset, ia perlu menahan kunci tingkat baris S pada entri yang saat ini dibaca. Proses penemuan berhenti ketika Tuple Mover menemukan kumpulan baris pertama yang dapat dikerjakan. Pada titik ini Tuple Mover akan melakukan pekerjaan sebenarnya untuk membilas buffer penghapusan, tetapi untuk memastikan bahwa rowset yang ditemukan masih valid, ia akan menahan kunci SCH-S pada semua rowset yang dievaluasi selama proses penemuan hingga menyelesaikan pekerjaannya.

Sysrowsets diurutkan oleh id rowset, sehingga dapat terjadi bahwa Tuple Mover memindai beberapa rowset yang ada yang tidak memiliki tindakan untuk dilakukan, tetapi masih akan menahan kunci SCH-S dan tiba di entri di sysrowsets yang tidak dapat memperoleh kunci S tingkat baris, karena saat ini sedang diubah oleh transaksi jangka panjang yang memegang kunci X pada baris. Pada titik ini, DDL yang melibatkan perubahan id rowset diblokir di belakang kunci SCH-S Tuple Mover.

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".

Referensi

Pelajari tentang terminologi yang digunakan Microsoft untuk menjelaskan pembaruan perangkat lunak.