Bandingkan Skema SSDT tidak berfungsi saat BULK INSERT sedang berlangsung

11

Saya bekerja di proyek ETL dan DW besar di mana kami menggunakan TFS / kontrol sumber bersama dengan SSIS dan SSDT.

Hari ini, saya menemukan bahwa sementara paket SSIS melakukan BULK INSERT ke dalam tabel database, tidak mungkin untuk melakukan Perbandingan Skema SSDT terhadap database itu. Ini sangat disayangkan, karena beberapa paket kami membutuhkan waktu yang cukup lama untuk diselesaikan. Kami ingin menggunakan fungsi Bandingkan Skema untuk mendeteksi perubahan pada struktur basis data untuk menyimpannya dalam proyek SSDT kami untuk kontrol versi dari basis data.

Melihat sedikit lebih dalam ini, saya menemukan bahwa fungsi Skema Bandingkan di SSDT mengeksekusi skrip SQL yang memanggil OBJECTPROPERTY()fungsi sistem pada tabel dalam database. Khususnya dalam kasus saya, semua panggilan ke OBJECTPROPERTY(<object_id>, N'IsEncrypted')tampaknya diblokir, ketika <object_id>merujuk ke tabel yang saat ini sedang dimasukkan secara massal.

Dalam Visual Studio, Bandingkan Skema SSDT hanya keluar setelah beberapa saat dan mengklaim bahwa tidak ada perbedaan yang terdeteksi.

Apakah ada solusi untuk masalah ini di SSDT, atau haruskah saya mencoba mengajukan laporan bug MS Connect?

Atau, karena BULK INSERT terjadi dari paket SSIS, apakah mungkin ada beberapa cara untuk membuat penyisipan ini tanpa mengunci OBJECTPROPERTY-panggilan di atas meja? Sunting: Di SSIS OLE DB Destinasi, kita dapat menghapus tanda centang dari "Lock Table", yang melakukan apa yang dikatakannya, tetapi ini mungkin merusak kinerja dalam beberapa situasi. Saya jauh lebih tertarik pada solusi yang memungkinkan SSDT Schema Compare untuk melakukan tugasnya, bahkan jika beberapa objek terkunci.

Dan
sumber
Lihat Mengontrol Perilaku Mengunci Impor Massal - Anda mungkin mengaktifkan 'kunci meja saat memuat massal'. Periksa juga BULK INSERT Anda tidak menentukan TABLOCK
stuartd
Jika Anda mengambil kunci meja, Anda mungkin akan menemukan beban lebih cepat jika Anda menonaktifkannya ( technet.microsoft.com/en-us/library/ms177445.aspx ) - apa pun penyebabnya saya akan meningkatkan koneksi karena batas waktu harus di paling tidak gagal daripada hanya mengatakan bahwa tidak ada perubahan
Ed Elliott
Terima kasih atas balasannya, stuartd dan Ed Elliot. Ternyata kami sebenarnya ingin mengunci meja, karena alasan kinerja. Menurut pendapat saya, SSDT harus dapat menangani ini, karena kami hanya ingin membandingkan basis data, tidak menerapkan perubahan pada objek dalam basis data. Saya akan membuat posting terhubung untuk mengatasi ini.
Dan
3
Internal bukan keahlian saya, tetapi seperti yang saya mengerti, Anda memiliki kunci di atas meja. Apa pun kunci yang diambil adalah untuk memasukkan bulk tidak sesuai dengan kunci yang diperlukan untuk memvalidasi skema. Relevan membaca BOL Schema lock
billinkc
Bisakah Anda menjelaskan mengapa skema perbandingan harus berjalan paralel dengan operasi beban? Mungkin alternatifnya adalah memiliki model referensi dari basis data. Tidak ada data, hanya skema. Jalankan perbandingan Anda dengan itu dan kemudian pastikan bahwa tidak ada yang memodifikasi database aktual di mana operasi massal ini dilakukan tanpa terlebih dahulu memperbarui model referensi.
billinkc

Jawaban:

19

The OBJECTPROPERTYpanggilan membutuhkan stabilitas skema (Sch-S) kunci, yang hanya kompatibel dengan modifikasi skema (Sch-M) kunci.

The BULK INSERTakan mengambil kunci Sch-M dalam beberapa keadaan. Ini tercantum di bagian "Mengunci Tabel dan Logging Selama Impor Massal" dari Pedoman untuk Mengoptimalkan Impor Massal di Buku Daring:

Penguncian Impor Massal

Jika tabel tujuan dikelompokkan, Anda mungkin menemukan mengaktifkan jejak bendera 610 membantu. Harap baca seluruh rangkaian pos tersebut dan Panduan Kinerja Pemuatan Data dan uji secara menyeluruh jika Anda memutuskan untuk memilih rute ini.

Saya tidak tahu mengapa SSDT memeriksa IsEncryptedproperti untuk tabel. Saya tidak bisa membayangkan skenario di mana itu masuk akal, tapi itu pertanyaan untuk orang-orang SSDT.

Paul White 9
sumber
3
Ini adalah jawaban yang sangat komprehensif dan memuaskan. Terima kasih banyak.
Dan