Bagaimana kita bisa memeriksa kunci basis data yang diterapkan pada baris mana terhadap kumpulan kueri?
Adakah alat yang menyoroti penguncian level baris tabel dalam waktu nyata?
DB: SQL Server 2005
sumber
Bagaimana kita bisa memeriksa kunci basis data yang diterapkan pada baris mana terhadap kumpulan kueri?
Adakah alat yang menyoroti penguncian level baris tabel dalam waktu nyata?
DB: SQL Server 2005
Untuk menambah tanggapan lain, sp_lock
juga dapat digunakan untuk membuang informasi kunci penuh pada semua proses yang berjalan. Outputnya bisa luar biasa, tetapi jika Anda ingin tahu persis apa yang dikunci, itu yang berharga untuk dijalankan. Saya biasanya menggunakannya bersama dengan sp_who2
dengan cepat membidik masalah penguncian.
Ada beberapa versi berbeda dari sp_lock
prosedur "ramah" yang tersedia online, tergantung pada versi SQL Server yang dimaksud.
Dalam kasus Anda, untuk SQL Server 2005, sp_lock
masih tersedia, tetapi sudah usang, jadi sekarang disarankan untuk menggunakan sys.dm_tran_locks
tampilan untuk hal semacam ini. Anda dapat menemukan contoh cara "menggulung fungsi sp_lock" Anda sendiri di sini .
Ini tidak persis menunjukkan kepada Anda baris mana yang dikunci, tetapi ini mungkin membantu Anda.
Anda dapat memeriksa pernyataan mana yang diblokir dengan menjalankan ini:
select cmd,* from sys.sysprocesses
where blocked > 0
Ini juga akan memberi tahu Anda apa yang menunggu setiap blok. Jadi, Anda bisa melacaknya sampai tuntas untuk melihat pernyataan mana yang menyebabkan blok pertama yang menyebabkan blok lainnya.
Edit untuk menambahkan komentar dari @MikeBlandford :
Kolom yang diblokir menunjukkan spid dari proses pemblokiran. Anda dapat menjalankan kill {spid} untuk memperbaikinya.
Anda dapat menemukan kunci saat ini di meja Anda dengan mengikuti kueri.
Lihat sys.dm_tran_locks
Jika ada beberapa instance dari request_owner_type yang sama , kolom request_owner_id digunakan untuk membedakan setiap instance. Untuk transaksi terdistribusi, kolom request_owner_type dan request_owner_guid akan menampilkan informasi entitas yang berbeda.
Misalnya, Sesi S1 memiliki kunci bersama di Table1; dan transaksi T1, yang berjalan di bawah sesi S1, juga memiliki kunci bersama pada Table1. Dalam hal ini, kolom resource_description yang dikembalikan oleh sys.dm_tran_locks akan menampilkan dua contoh dari sumber daya yang sama. The request_owner_type kolom akan menampilkan satu contoh sebagai sesi dan yang lainnya sebagai transaksi. Juga, kolom resource_owner_id akan memiliki nilai yang berbeda.
sumber
Saya menggunakan Dynamic Management View (DMV) untuk menangkap kunci serta object_id atau partisi_id dari item yang dikunci.
(HARUS beralih ke Database yang ingin Anda amati untuk mendapatkan object_id)
sumber
sp_who2
dan dalamsys.dm_os_waiting_task
(keduanya mencoba memperbarui tabel yang sama). Tetapi pernyataan Anda tidak mengembalikan baris. Ada ide?Anda juga dapat menggunakan
sp_who2
prosedur tersimpan bawaan untuk mendapatkan proses yang diblokir dan memblokir saat ini pada contoh SQL Server. Biasanya Anda akan menjalankan ini bersama contoh SQL Profiler untuk menemukan proses pemblokiran dan melihat perintah terbaru yang dikeluarkan spid di profiler.sumber
Anda dapat menemukan detailnya melalui skrip di bawah ini.
sumber