Laman Deadlock di ApsaraDB RDS for SQL Server menampilkan detail seperti waktu mulai transaksi, ID sesi, resource yang terkunci, dan jenis deadlock untuk membantu Anda mengidentifikasi serta menyelesaikan pernyataan SQL bermasalah penyebab deadlock. Topik ini menjelaskan cara melihat deadlock dan detailnya untuk instans ApsaraDB RDS for SQL Server di Konsol ApsaraDB RDS.
Informasi latar belakang
Ketika sebuah transaksi memodifikasi suatu resource, transaksi tersebut menerapkan kunci untuk mencegah transaksi lain mengubahnya, sehingga menjamin konsistensi data.
Deadlock biasanya terjadi ketika beberapa transaksi bersaing memperebutkan resource. Misalnya, Transaksi A mengunci Resource A dan mencoba memodifikasi Resource B, sementara Transaksi B mengunci Resource B dan mencoba memodifikasi Resource A. Ketergantungan siklis ini menyebabkan deadlock karena masing-masing transaksi menunggu pihak lain melepas kuncinya. Sistem kemudian secara otomatis menghentikan sesi dengan biaya rollback terendah (sesi korban), sehingga tugasnya gagal. Gambar berikut mengilustrasikan skenario ini.

Jenis deadlock
Laman Deadlock menampilkan statistik untuk lima jenis deadlock berikut:
-
KeyDeadlock
-
ObjectDeadlock
-
RIDDeadlock
-
PageDeadlock
-
CompileDeadlock
Mode lock
Saat sebuah transaksi mengakses suatu resource, transaksi tersebut menggunakan berbagai mode lock (LockMode) tergantung pada jenis aksesnya. Mode tersebut meliputi:
-
Shared lock (S): Mengizinkan resource dibaca tetapi tidak dimodifikasi selama lock aktif.
-
Update lock (U): Mencegah transaksi lain mendapatkan exclusive lock pada resource, sebagai indikasi niat untuk memodifikasinya. Lock ini biasanya digunakan untuk menghindari deadlock yang dapat terjadi ketika beberapa session mencoba membaca, mengunci, lalu memperbarui resource yang sama.
-
Exclusive lock (X): Mencegah transaksi lain mengakses resource tersebut.
Prasyarat
-
Fitur ini tidak tersedia untuk instans ApsaraDB RDS for SQL Server 2008 R2 yang menggunakan cloud disk.
-
Fitur ini hanya tersedia untuk instans ApsaraDB RDS for SQL Server di wilayah berikut: Tiongkok (Hangzhou), Tiongkok (Shanghai), Tiongkok (Qingdao), Tiongkok (Beijing), Tiongkok (Zhangjiakou), Tiongkok (Hohhot), Tiongkok (Ulanqab), Tiongkok (Shenzhen), Tiongkok (Heyuan), Tiongkok (Guangzhou), Tiongkok (Chengdu), Tiongkok (Hong Kong), Singapura, atau UEA (Dubai).
Detail deadlock
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS tersebut dan klik ID-nya.
-
Di panel navigasi kiri, pilih .
Laman Deadlock
-
Deadlock count
Bagian ini menunjukkan jumlah deadlock terbaru, dengan statistik untuk empat rentang waktu: deadlock dalam 24 jam terakhir, deadlock dalam 7 hari terakhir, deadlock dalam dua minggu terakhir, dan deadlock dalam sebulan terakhir.
-
Deadlock trend
Bagian ini menampilkan grafik tren deadlock dalam rentang waktu tertentu. Anda dapat melakukan operasi berikut:
-
Pilih Start Date dan End Date, lalu klik Search untuk melihat informasi deadlock dalam rentang waktu tersebut. Rentang waktu tidak boleh melebihi 30 hari.
-
Klik Previous Day, Last 7 Days, atau Last Month untuk dengan cepat melihat informasi deadlock dalam rentang waktu tersebut.
-
Arahkan kursor ke titik waktu tertentu untuk melihat jenis dan jumlah deadlock yang terjadi pada waktu tersebut.
-
Klik ikon
di pojok kanan atas grafik tren untuk mengubah gaya tampilan grafik atau mengunduhnya.

-
-
Deadlock Details
Klik ikon
di samping catatan deadlock untuk melihat detail sesi yang terlibat deadlock. Detail tersebut mencakup:-
LastTranStarted: Waktu saat transaksi dimulai.
-
SPID: ID sesi yang memulai transaksi.
-
IsVictim: Menunjukkan apakah sesi tersebut dihentikan (killed) untuk menyelesaikan deadlock.
CatatanSQL Server menyelesaikan deadlock dengan menggunakan thread internal yang secara berkala memeriksa keberadaannya. Saat deadlock terdeteksi, SQL Server menghentikan sesi yang memiliki biaya rollback lebih rendah di antara sesi yang terlibat. Sebagai contoh, karena pernyataan
SELECTbiasanya memiliki biaya lebih rendah daripada pernyataanUPDATE, sistem memprioritaskan penghentian sesi yang menjalankan pernyataanSELECT. -
LogUsed: Ukuran log yang dihasilkan oleh sesi. Satuan: byte.
-
LockMode: mode lock.
-
WaitResourceDesc: Deskripsi resource yang sedang ditunggu oleh transaksi saat ini.
-
ObjectOwned: Objek yang sudah dikunci.
-
ObjectRequested: Objek yang diminta dikunci oleh transaksi saat ini.
-
WaitResource: Resource yang sedang ditunggu oleh transaksi saat ini.
-
HostName: hostname dari transaksi saat ini.
-
LoginName: Nama akun untuk transaksi saat ini.
-
Status: Status transaksi saat ini.
-
ClientApp: Nama aplikasi klien yang digunakan oleh transaksi saat ini.
-
SQLText: Detail pernyataan SQL.
CatatanKlik Click to Copy untuk menyalin pernyataan SQL guna mempermudah troubleshooting dan analisis.
Klik baris mana pun dalam daftar detail untuk menampilkan diagram deadlock yang sesuai di bawahnya.
-
-
Deadlock diagram
Bagian ini menampilkan hubungan antar sesi yang terlibat deadlock dan memberikan detail tentang resource yang terkunci. Anda dapat mengklik tombol Download untuk mengunduh file XDL yang berisi detail deadlock saat ini. File ini dapat dibuka dan dilihat menggunakan SQL Server Management Studio (SSMS).

Solusi dan optimasi deadlock
Cara menyelesaikan deadlock pada instans ApsaraDB RDS for SQL Server