Execution Timeout Expired

System.Data.SqlClient.SqlException:
Execution Timeout Expired.
The timeout period elapsed prior to completion of the operation or the server is not responding.
Performance Severity 11 · هشدار

شرح خطا

خطای Timeout زمانی رخ می‌دهد که اجرای Query یا Command بیشتر از زمان تعیین‌شده در Client طول بکشد. این خطا الزاماً به معنی Down بودن SQL Server نیست. عواملی مانند Query کند، Blocking، Deadlock، کمبود منابع، I/O بالا، اجرای Execution Plan نامناسب یا فشار زیاد روی Server می‌توانند باعث Timeout شوند.

علت‌های رایج

  • Query در SSMS یا Application بسیار طولانی اجرا می‌شود
  • Application خطای Timeout دریافت می‌کند
  • CPU یا Disk بالا است
  • Blocking روی Database وجود دارد
  • Query Plan نامناسب است

راهکارها

  1. Blocking را بررسی کنید.
  2. Execution Plan را بررسی کنید.
  3. Query Store را بررسی کنید.
  4. وضعیت CPU و Disk I/O را بررسی کنید.
  5. Indexهای مورد نیاز را بررسی کنید.
  6. Execution Time Query را اندازه‌گیری کنید.
  7. Timeout را فقط در صورت نیاز افزایش دهید؛ افزایش Timeout جایگزین Tuning نیست.

اسکریپت رفع خطا

-- بررسی Sessionهای در حال Block شدن
SELECT
    r.session_id,
    r.status,
    r.blocking_session_id,
    r.wait_type,
    r.wait_time,
    r.cpu_time,
    r.total_elapsed_time,
    DB_NAME(r.database_id) AS database_name,
    t.text AS sql_text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.blocking_session_id <> 0;

نمونه واقعی

Application: AccountingApp Query: SELECT * FROM dbo.Transactions WHERE CustomerID = 10025; Execution Time: 85 seconds Application CommandTimeout: 30 seconds Result: Execution Timeout Expired

خطاهای مرتبط