Từ quan điểm ứng dụng, có:
- hết thời gian kết nối (ứng dụng sẵn sàng chờ bao lâu để thiết lập kết nối với SQL Server)
- hết thời gian chờ lệnh (ứng dụng sẵn sàng chờ lệnh hoàn thành trong bao lâu, bao gồm cả việc kéo kết quả xuống từ SQL Server)
Quay trở lại những ngày kinh điển của tôi, mặc định của chúng lần lượt là 15 và 30 giây , tôi không biết chúng là gì theo mặc định trong .NET ngày hôm nay.
SQL Server có bộ thời gian chờ riêng, ví dụ:
- Hết thời gian truy vấn từ xa. Mặc định là 600 giây (10 phút).
- Hết thời gian đăng nhập từ xa. Mặc định là 10 giây.
- Truy vấn chờ. Mặc định là -1 (25 x chi phí truy vấn).
- Toàn thời gian xử lý giao thức xử lý. Mặc định là 60 giây.
Bạn có thể thấy những giá trị này cho hệ thống của bạn ở đây:
SELECT * FROM sys.configurations
WHERE configuration_id IN (1519,1520,1541,1557);
Ngoài ra còn có @@LOCK_TIMEOUT
(mặc định là -1 (vô cùng)). Đây là thời gian SQL Server sẽ đợi trên một tài nguyên bị chặn. Bạn có thể ghi đè lên phiên này cho một phiên cụ thể bằng cách sử dụng SET LOCK_TIMEOUT
. Thêm chi tiết tại đây .
Những bế tắc tôi cho rằng cũng có thể rơi vào loại này. Hệ thống quét các tình huống bế tắc cứ sau 5 giây và không có công thức ma thuật nào để xác định khi nào sự bế tắc sẽ xảy ra liên quan đến khi bất kỳ yêu cầu liên quan nào bắt đầu. Điều này là do SQL Server không để giao dịch cũ nhất giành chiến thắng; nó chọn nạn nhân dựa trên DEADLOCK_PRIORITY và lượng tài nguyên ước tính cần thiết để đưa nạn nhân trở lại. Thêm chi tiết tại đây .
Ngoài ra còn có thời gian chờ cấp bộ nhớ (có thể được tùy chỉnh bằng Resource Governor). Tùy thuộc vào sự tương tranh, một truy vấn sẽ không nhất thiết thất bại nếu nó hết thời gian chờ trước khi có được tất cả bộ nhớ được yêu cầu, nó sẽ chỉ chạy với số lượng được phân bổ (và do đó có thể kém hiệu quả hơn). Nếu thất bại, bạn có thể sẽ thấy Msg 8645.
Bạn có thể có ý tưởng cho các tình huống hết thời gian tiềm năng khác có thể xảy ra trong SQL Server bằng cách xem lại các thông báo lỗi này:
SELECT message_id, [text]
FROM sys.messages
WHERE language_id = 1033
AND ([text] LIKE '%timeout%' OR [text] LIKE '%time out%')
Tuy nhiên tôi không nghĩ rằng đó là thực tế, khả thi hoặc hiệu quả cho bất cứ ai cố gắng cung cấp cho bạn một danh sách đầy đủ và đầy đủ về mọi tình huống hết thời gian có thể. Giải quyết các vấn đề bạn đang gặp phải, thay vì giải quyết sớm một loạt vấn đề mà có lẽ bạn sẽ không bao giờ ...