1205
Transaction deadlocked
Msg 1205, Level 13, State 45, Line 1 Transaction (Process ID 57) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Performance
Severity 13 · هشدار
شرح خطا
خطای 1205 زمانی رخ میدهد که دو یا چند Session در SQL Server منابعی را Lock کردهاند و هر Session منتظر آزاد شدن Lock متعلق به Session دیگر است. SQL Server برای جلوگیری از ایجاد بنبست دائمی، یکی از Transactionها را به عنوان Deadlock Victim انتخاب کرده و Rollback میکند.
علتهای رایج
- اجرای تصادفی Query با خطای 1205 متوقف میشود
- تراکنشها منتظر یکدیگر میمانند
- CPU یا Lockها افزایش پیدا میکنند
- Application خطای Deadlock دریافت میکند
راهکارها
- Deadlock Graph را بررسی کنید.
- Queryهای درگیر را شناسایی کنید.
- ترتیب دسترسی Transactionها به جداول را یکسان کنید.
- Transactionها را کوتاهتر کنید.
- Indexهای مناسب ایجاد کنید.
- عملیات طولانی داخل Transaction را کاهش دهید.
- در Application برای Error 1205 مکانیزم Retry پیادهسازی کنید.
اسکریپت رفع خطا
-- بررسی Deadlockهای ثبتشده در Extended Events
SELECT
CAST(event_data AS XML) AS DeadlockGraph
FROM sys.fn_xe_file_target_read_file(
'system_health*.xel',
NULL,
NULL,
NULL
)
WHERE object_name = 'xml_deadlock_report';
نمونه واقعی
Session 51: UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 10; Session 57: UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 20; هر Session منتظر Lock متعلق به Session دیگر است. SQL Server: Msg 1205 Transaction was deadlocked...