"Ketika koneksi ditutup dan kembali ke kolam, tingkat isolasi dari pernyataan TINGKAT ISOLASI TRANSAKSI SET terakhir dipertahankan"?

8

Artikel online MSDN " Isolasi Snapshot di SQL Server " menyatakan:

  • "Level isolasi memiliki lingkup koneksi yang luas, dan sekali diatur untuk koneksi dengan pernyataan SET TRANSACTION ISOLATION, ia akan tetap berlaku sampai koneksi ditutup atau level isolasi lain ditetapkan. Ketika koneksi ditutup dan kembali ke pool , level isolasi dari pernyataan LEVEL SET TRANSACTION ISOLATION SET dipertahankan . Koneksi selanjutnya menggunakan kembali koneksi gabungan menggunakan level isolasi yang berlaku pada saat koneksi dikumpulkan "

Bukankah itu paragraf yang saling bertentangan ("sampai" vs. "dipertahankan")?

Kemudian, jika "level isolasi dari pernyataan SET TRANSACTION ISOLATION LEVEL terakhir dipertahankan " setelah menutup koneksi dan mengembalikannya ke pool, bagaimana itu harus dipahami:

  • bahwa tingkat isolasi default akan memiliki nilai arbitrer (koneksi yang berbeda di kumpulan akan memiliki tingkat isolasi yang berbeda, dan nilainya akan tergantung pada koneksi yang dibuka kembali)?
  • atau semua nilai default pada semua koneksi dalam kelompok ini akan diubah menjadi yang terakhir? tapi sekali lagi tidak diketahui sebelumnya?
Tahan debu
sumber

Jawaban:

14

Koneksi dari kumpulan akan memiliki tingkat isolasi yang ditetapkan oleh klien terakhir untuk menggunakan koneksi itu. Ya, itu benar-benar menakutkan.

Panjang dan pendeknya adalah bahwa jika Anda mengubah tingkat isolasi koneksi Anda harus secara eksplisit mengaturnya kembali READ COMMITTEDsebelum ditutup. Lebih baik secara eksplisit menyatakan tingkat isolasi yang Anda butuhkan pada awal setiap batch, untuk memastikan kode Anda tidak terpengaruh oleh orang lain yang ceroboh, dan mengembalikannya ke default di akhir.

Perilaku ini, meskipun membingungkan, tampaknya dirancang khusus .

Mark Storey-Smith
sumber
Belum pernah melihat yang "harus secara eksplisit" dan "Lebih baik untuk secara eksplisit" dalam artikel, buku, blog, dokumen, dll.
Fulproof
5

Bukankah itu paragraf yang saling bertentangan ("sampai" vs. "dipertahankan")?

Bukan untuk saya, tetapi saya bisa melihat ada cara lain untuk membacanya. Jika Anda ingin dokumentasi diperbarui agar lebih jelas, tempat yang tepat untuk meminta ini adalah di Microsoft Connect . Orang-orang di sini tidak memelihara dokumentasi Microsoft.

bahwa tingkat isolasi default akan memiliki nilai arbitrer (koneksi yang berbeda di kumpulan akan memiliki tingkat isolasi yang berbeda, dan nilainya akan tergantung pada koneksi yang dibuka kembali)?

Jika Anda menggunakan kembali koneksi yang terkumpul, maka ya, tingkat isolasi "yang sudah ada" adalah apa yang berlaku ketika koneksi yang dikumpulkan terakhir ditutup. Praktik terbaik adalah secara eksplisit mengatur tingkat isolasi yang diperlukan saat menghubungkan.

atau semua nilai default pada semua koneksi di pool akan diubah menjadi yang terakhir? tapi sekali lagi tidak diketahui sebelumnya?

Tidak.

Paul White 9
sumber