Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

TABLOCK vs TABLOCKX

Perbedaan besar, TABLOCK akan mencoba mengambil kunci "bersama", dan TABLOCKX kunci eksklusif.

Jika Anda sedang bertransaksi dan Anda mengambil kunci eksklusif di atas meja, misal:

SELECT 1 FROM TABLE WITH (TABLOCKX)

Tidak ada proses lain yang dapat mengambil apa pun kunci di atas meja, artinya semua kueri yang mencoba berbicara ke tabel akan diblokir hingga transaksi dilakukan.

TABLOCK hanya mengambil kunci bersama, kunci bersama dilepaskan setelah pernyataan dijalankan jika isolasi transaksi Anda READ COMMITTED (bawaan). Jika tingkat isolasi Anda lebih tinggi, misalnya:SERIALIZABLE , kunci bersama ditahan hingga akhir transaksi.

Kunci bersama, hmmm, dibagikan. Artinya 2 transaksi dapat membaca data dari tabel secara bersamaan jika keduanya memegang kunci S atau IS di atas tabel (melalui TABLOCK ). Namun, jika transaction A memegang kunci bersama di atas meja, transaction B tidak akan dapat mengambil kunci eksklusif sampai semua kunci bersama dilepaskan. Baca tentang kunci mana yang kompatibel dengan yang mana di msdn.

Kedua petunjuk menyebabkan db memintas mengambil lebih banyak kunci granular (seperti kunci tingkat baris atau halaman). Pada prinsipnya, kunci yang lebih granular memungkinkan Anda melakukan konkurensi yang lebih baik. Jadi misalnya, satu transaksi dapat memperbarui baris 100 di tabel Anda dan baris 1000 lainnya, secara bersamaan dari dua transaksi (ini menjadi rumit dengan penguncian halaman, tetapi mari kita lewati itu).

Secara umum, kunci granular adalah yang Anda inginkan, tetapi terkadang Anda mungkin ingin mengurangi konkurensi db untuk meningkatkan kinerja operasi tertentu dan menghilangkan kemungkinan kebuntuan.

Secara umum Anda tidak akan menggunakan TABLOCK atau TABLOCKX kecuali Anda benar-benar membutuhkannya untuk beberapa kasus tepi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 Cara Mendapatkan Bahasa Sesi Saat Ini di SQL Server (T-SQL)

  2. Cara tercepat untuk menghapus karakter non-numerik dari VARCHAR di SQL Server

  3. Apakah kode ini mencegah injeksi SQL?

  4. Cara Mengirim Email Hasil Query di SQL Server (T-SQL)

  5. Entity Framework Core 2.0:Cara mengonfigurasi kelas dasar abstrak sekali