Ini adalah pertanyaan lanjutan dari: /programming/7684477/is-it-possible-to-set-transaction-isolation-level-snapshot-automaticallyally
Saya masih mengalami kebuntuan / batas waktu situasi dalam aplikasi ASP.NET ketika menjalankan laporan besar secara bersamaan READ_COMMITTED_SNAPSHOT ON
.
Jadi saya punya dua pertanyaan:
- Bagaimana saya bisa mengecek apakah Snapshot Level Isolasi Transaksi berfungsi seperti yang diharapkan / sama sekali?
- Saya berasumsi bahwa kunci asing (dalam tabel Aplikasi Web ke tabel laporan) bertanggung jawab atas kebuntuan. Saya menemukan artikel yang menarik ini :
Catatan SQL Server memperoleh kunci bersama ketika memvalidasi kunci asing, bahkan jika transaksi menggunakan snapshot yang dilakukan (baca berkomitmen menggunakan versi baris) atau tingkat isolasi snapshot. Perhatikan hal ini ketika memeriksa grafik kebuntuan dari transaksi saat tingkat isolasi transaksi ini digunakan. Jika Anda melihat kunci bersama, periksa untuk melihat apakah kunci diambil pada objek yang dirujuk oleh kunci asing.
Bagaimana saya bisa mengecek jika FK benar-benar bertanggung jawab atas situasi Deadlock / Timeout, apakah itu berarti saya bisa menghapus kunci asing itu untuk mencegah kebuntuan (apa upaya yang bisa diterima)?
Catatan : Saya hanya membaca dari tabel yang menyebabkan kebuntuan.
Setiap pemikiran tentang topik ini sangat dihargai.
Sunting Di sini adalah Deadlock-Graph . Mungkin seseorang bisa membantu saya untuk memahami apa yang menyebabkan kebuntuan. Tampaknya terjadi tanpa laporan yang berjalan hanya disebabkan oleh aplikasi web, ketika dua transaksi ingin menulis tabel yang sama (satu pembaruan dan satu sisipan, sisipannya adalah Stored-Procedure). Mengapa ia memerlukan kunci halaman dan cara mengaktifkan kunci baris saja? Sisipan-SP sudah menggunakan TRANSACTION ISOLATION LEVEL REPEATABLE READ
.
Saya memiliki dugaan kuat bahwa dua pemicu (satu pembaruan dan satu masukkan) bertanggung jawab atas kebuntuan. Inilah pemicu sisipan:
CREATE TRIGGER [dbo].[CreateRMAFiDates]
ON [dbo].[RMA]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE RMA
SET [fiCreationDate]=(SELECT idDate FROM tdefDate
WHERE CONVERT(VARCHAR, INSERTED.Creation_Date, 112) = tdefDate.Text),
[fiPopDate]=(SELECT idDate FROM tdefDate
WHERE CONVERT(VARCHAR, INSERTED.POP_Date, 112) = tdefDate.Text),
[fiManufactureDate]=(SELECT idDate FROM tdefDate
WHERE CONVERT(VARCHAR, INSERTED.Manufacture_Date, 112) = tdefDate.Text)
FROM INSERTED;
END
Jadi pemicu ini memperbarui RMA-Table apa yang menyebabkan pemicu pembaruan untuk memicu (apa yang mirip). Apakah grafik kebuntuan mengkonfirmasi asumsi saya? Saya pikir saya akan menghapus pemicu tersebut dan membuat SP yang berjalan sekali sehari apa yang akan cukup sempurna, karena kolom ini hanya untuk SSAS-Cube (Molap) saja.
Sunting : Omong-omong, tidak ada jalan buntu lagi karena saya menghapus pemicu ini :)