Topik ini menjelaskan cara menyelesaikan masalah pemblokiran permintaan pada instance ApsaraDB RDS for SQL Server dalam situasi darurat. Untuk mengatasi masalah ini, disarankan untuk mengidentifikasi dan menganalisis penyebab pemblokiran serta merumuskan solusi berdasarkan hasil analisis. Masalah ini sering disebabkan oleh indeks yang hilang atau transaksi besar. Jika indeks hilang atau terdapat transaksi besar, transaksi memerlukan waktu lama untuk dijalankan, sehingga kunci tetap terkunci lebih lama. Akibatnya, banyak permintaan menjadi terblokir. Untuk informasi lebih lanjut, lihat Bagaimana cara menyelesaikan masalah bahwa permintaan diblokir pada instance ApsaraDB RDS for SQL Server?
Deskripsi Masalah
Permintaan terblokir pada instance RDS.
Penyebab
Transaksi bersaing untuk sumber daya yang terkunci.
Solusi
Jalankan pernyataan berikut untuk mendapatkan informasi tentang kunci dan blokir:
SELECT dtl.request_session_id AS waitSID, der.blocking_session_id AS blockSID, dowt.resource_description, der.wait_type, dowt.wait_duration_ms, DB_NAME(dtl.resource_database_id) AS DB, dtl.resource_associated_entity_id AS waitingAssociatedEntity, dtl.resource_type AS waitResType, dtl.request_type AS waitReqType, dest.[text] AS waitSQL, dtl1.request_type AS blockReqType, dest1.[text] AS blockingSQL FROM sys.dm_tran_locks dtl JOIN sys.dm_os_waiting_tasks dowt ON dowt.resource_address=dtl.lock_owner_address JOIN sys.dm_exec_requests der ON der.session_id=dtl.request_session_id CROSS apply sys.dm_exec_sql_text(der.sql_handle) dest LEFT JOIN sys.dm_exec_requests der1 ON der.session_id=dowt.blocking_session_id OUTER apply sys.dm_exec_sql_text(der1.sql_handle) dest1 LEFT JOIN sys.dm_tran_locks dtl1 ON dtl1.request_session_id=der1.session_idJalankan pernyataan berikut untuk mendapatkan informasi tentang sumber daya yang terkunci:
SELECT OBJECT_NAME(i.object_id) obj, i.name FROM sys.partitions p JOIN sys.indexes i ON i.object_id=p.object_id AND i.index_id=p.index_id WHERE p.partition_id=[$Waiting_Associate_Entity]Catatan[$Waiting_Associate_Entity]menentukan sumber daya yang sedang ditunggu oleh transaksi.Jalankan perintah
killuntuk menghentikan sesi yang memblokir.