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 دریافت می‌کند

راهکارها

  1. Deadlock Graph را بررسی کنید.
  2. Queryهای درگیر را شناسایی کنید.
  3. ترتیب دسترسی Transactionها به جداول را یکسان کنید.
  4. Transactionها را کوتاه‌تر کنید.
  5. Indexهای مناسب ایجاد کنید.
  6. عملیات طولانی داخل Transaction را کاهش دهید.
  7. در 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...

خطاهای مرتبط