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

SQL Server, XLOCK &optimasi yang menyesatkan

Eksklusifitas X kunci vs U kunci

Pada matriks kompatibilitas kunci di bawah ini dapat dilihat bahwa X lock hanya kompatibel dengan stabilitas skema dan tipe kunci Insert Range-Null. U kompatibel dengan jenis kunci bersama tambahan berikut S /IS /RS-S /RI-S /RX-S

kunci matriks kompatibilitas http://i.msdn.microsoft.com/ms186396.LockConflictTable(en-us,SQL.105).gif

Perincian X kunci

Ini diambil dengan baik di semua tingkatan. Jejak skrip dan profiler di bawah ini menunjukkan bahwa mereka berhasil dikeluarkan di tingkat baris.

CREATE TABLE test_table (id int identity(1,1) primary key, col char(40))

INSERT INTO test_table
SELECT NEWID() FROM sys.objects

select * from test_table with (rowlock,XLOCK) where id=10

Tapi baris masih bisa dibaca!

Ternyata di read committed tingkat isolasi SQL Server tidak akan selalu mengeluarkan S kunci, itu akan melewati langkah ini jika tidak ada risiko membaca data yang tidak terikat tanpa mereka. Artinya, tidak ada jaminan konflik kunci akan pernah terjadi.

Namun jika pilihan awal adalah with (paglock,XLOCK) maka ini akan hentikan transaksi pembacaan sebagai X kunci pada halaman akan memblokir IS kunci halaman yang akan selalu dibutuhkan oleh pembaca. Ini tentu saja akan berdampak pada konkurensi.

Peringatan Lainnya

Bahkan jika Anda mengunci baris/halaman, ini tidak berarti bahwa Anda memblokir semua akses ke baris itu dalam tabel. Kunci pada baris dalam indeks berkerumun tidak akan mencegah kueri membaca data dari baris yang sesuai dalam indeks yang tidak berkerumun.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai kolom identitas tiba-tiba melompat ke 1001 di server sql

  2. Bagaimana cara menghapus karakter ASCII yang diperluas dari string di T-SQL?

  3. Memecahkan Masalah Kemacetan I/O Disk

  4. Tidak dapat terhubung ke SQL Server dengan PHP

  5. Cara paling efisien di SQL Server untuk mendapatkan tanggal dari tanggal + waktu?