All Products
Search
Document Center

ApsaraDB RDS:Apa yang harus saya lakukan jika permintaan diblokir pada instance ApsaraDB RDS for SQL Server?

Last Updated:Jul 02, 2025
Penting

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

  1. 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_id
  2. Jalankan 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.

  3. Jalankan perintah kill untuk menghentikan sesi yang memblokir.