Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để xử lý deadlock Sql Server hiệu quả trong C # với ADO?

Trước tiên, tôi sẽ xem lại mã SQL 2000 của mình và tìm hiểu kỹ lý do tại sao lại xảy ra tình trạng bế tắc này. Việc khắc phục điều này có thể đang che giấu một vấn đề lớn hơn (Ví dụ:thiếu chỉ mục hoặc truy vấn không hợp lệ).

Thứ hai, tôi sẽ xem xét kiến ​​trúc của mình để xác nhận rằng câu lệnh deadlocking thực sự cần được gọi thường xuyên như vậy (Liệu select count(*) from bob phải được gọi 100 lần một giây?).

Tuy nhiên, nếu bạn thực sự cần một số hỗ trợ deadlock và không có lỗi trong SQL hoặc kiến ​​trúc của bạn, hãy thử làm gì đó dọc theo các dòng sau. (Lưu ý:Tôi đã phải sử dụng kỹ thuật này cho một hệ thống hỗ trợ hàng nghìn truy vấn mỗi giây và rất hiếm khi xảy ra bế tắc)

int retryCount = 3;
bool success = false;  
while (retryCount > 0 && !success) 
{
  try
  {
     // your sql here
     success = true; 
  } 
  catch (SqlException exception)
  {
     if (exception.Number != 1205)
     {
       // a sql exception that is not a deadlock 
       throw; 
     }
     // Add delay here if you wish. 
     retryCount--; 
     if (retryCount == 0) throw;
  }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 cách trả về tất cả các hàm do người dùng xác định trong cơ sở dữ liệu máy chủ SQL

  2. Cách thay đổi cột hoặc tạo tập lệnh thay thế bằng cách sử dụng GUI trong SQL Server - Hướng dẫn sử dụng SQL Server / T-SQL Phần 38

  3. OPTION (RECOMPILE) luôn nhanh hơn; Tại sao?

  4. Sử dụng XEvent Profiler để nắm bắt các truy vấn trong SQL Server

  5. Hiệu suất máy chủ SQL TOP truy vấn CPU -1