Saya benar-benar mengalami kesulitan melacak beberapa pemblokiran yang kita alami.
Root blocking status SPID 'tidur', cmd adalah 'AWAITING COMMAND', dan sqltext
itu SET TRANSACTION ISOLATION LEVEL READ COMMITTED
.
Ketika saya melihat transaksi teratas oleh laporan jumlah transaksi yang diblokir, pernyataan SQL yang diblokir adalah '-'.
Saya telah melakukan penelusuran pada SQL dan ketika pemblokiran terjadi, menelusuri SPID pemblokiran root tetapi belum benar-benar membawa saya ke mana pun. Pernyataan jejak terakhir sama dengan yang di sqltext
atas SET TRANSACTION ISOLATION LEVEL READ COMMITTED
.
Saya telah memeriksa semua prosedur tersimpan terkait yang dapat saya temukan untuk memastikan mereka memiliki TRY / CATCH BEGIN TRAN / COMMIT TRAN / ROLLBACK TRAN pernyataan (kami menggunakan prosedur tersimpan untuk semuanya sehingga tidak ada pernyataan mandiri yang dijalankan). Masalah ini baru mulai terjadi selama 24 jam terakhir dan tidak ada yang mengklaim telah melakukan perubahan pada sistem.
Solusi: salah satu prosedur tersimpan kami yang jarang digunakan memiliki kesalahan dengan sisipan (jumlah kolom tidak cocok), tetapi kami masih bingung tentang apa yang sebenarnya terjadi.
Saat melihat semua informasi penelusuran, pernyataan EXEC untuk prosedur tersimpan ini terdaftar beberapa kali, tetapi TIDAK PERNAH tepat sebelum BLOK terjadi pada SPID pemblokiran. Tampaknya ketika mulai memblokir, jejak tidak mencatat eksekusi (atau pernyataan di dalamnya). Namun ada kalanya jejak itu merekam eksekusi itu dan tidak ada pemblokiran yang terjadi.
Laporan kesalahan prosedur tersimpan berasal dari pengguna, dan saya bisa menemukan beberapa pernyataan EXEC di jejak dan menjalankannya di SSMS. Tidak ada waktu ketika saya menjalankannya kita memiliki pemblokiran atau mereka menggantung. Mereka berlari seperti yang diharapkan (blok penahan menembak dan memutar kembali transaksi setelah kesalahan). Setelah menyelesaikan perbaikan prosedur tersimpan, kami belum melihat masalah lagi.