Gejala
Misalnya Anda menambahkan kolom ke tabel di Microsoft SQL Server 2012 atau SQL Server 2014. Saat ukuran baris mendekati ukuran maksimum yang diizinkan yaitu 8.060 byte, operasi penambahan mungkin memakan waktu lama.
Penyebab
Masalah ini terjadi karena, ketika ukuran Total baris mendekati ukuran maksimum baris yang diperbolehkan, SQL Server melakukan pemindaian penuh tabel untuk memastikan bahwa penambahan kolom baru tidak melanggar integritas data. Versi sebelum 2012 SQL Server tidak melakukan pemeriksaan ini, dan yang membuat bahasa definisi data (DDL) berjalan lebih cepat. Namun, perilaku ini menyebabkan kegagalan operasi berikutnya seperti memperbarui baris atau menyusut jika ukuran baris melebihi ukuran yang diperbolehkan.
Pemecahan Masalah
Pembaruan kumulatif memperkenalkan bendera pelacakan baru 647 untuk perilaku kompatibilitas mundur. Masalah ini pertama kali diperbaiki dalam pembaruan kumulatif SQL Server berikut ini.
Pembaruan kumulatif 5 untuk SQL Server 2014 /en-us/help/3011055
Pembaruan kumulatif 12 untuk SQL Server 2012 SP1 /en-us/help/2991533
Pembaruan kumulatif 2 untuk SQL Server 2012 SP2 /en-us/help/2983175
Setiap pembaruan kumulatif baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk SQL Server:
Informasi Selengkapnya
-
Anda dapat mengaktifkan bendera pelacakan 647 dengan menggunakan parameter permulaan. Untuk informasi, lihat opsi permulaan layanan mesin database.
-
Anda bisa menjalankan kueri berikut (ganti nama <tabel> dengan nama tabel Anda yang sebenarnya) untuk menguji tabel tertentu sebelum operasi pada sistem produksi, dan rencanakan efek masalah ini. Jika hasilnya lebih besar dari 8.060, tabel Anda tunduk pada masalah ini. Selain itu, jika Anda telah menjatuhkan kolom, Anda harus mengubah tabel dengan opsi Rebuild. Menyusun ulang tabel bisa membuat kueri mengembalikan hasil yang benar.
select 1+1+2 + 2 + (case when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end) + ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 + sum( case when max_length=-1 then 24 else max_length end) from sys.system_internals_partition_columns col join sys.partitions par on col.partition_id = par.partition_id where object_id = object_id ('<table name>') and index_id in (0,1) and partition_number =1
-
Anda bisa mempertimbangkan menambahkan kolom panjang variabel atau kolom jarang ketika aplikasi Anda sering menambahkan kolom baru ke tabel. Ini adalah operasi metadata saja meskipun ukuran Total Semua kolom melebihi 8.060 byte.
Status
Microsoft telah mengonfirmasi bahwa ini adalah masalah pada produk Microsoft yang tercantum di bagian "Berlaku untuk".