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

Câu lệnh ghép t-SQL gây ra bế tắc, bất kỳ ý kiến ​​nào tại sao?

Bạn cần giữ nhiều ổ khóa hơn hoặc ít hơn.

Câu trả lời dễ nhất là đi NOLOCK (hiệu suất tốt nhất) hoặc TABLOCKX (nhất quán mà không cần phải suy nghĩ).

Nếu bạn không thể sử dụng with (nolock) vì yêu cầu nhất quán, bạn có thể thêm with (tablockx) Điều này có nghĩa là chỉ một luồng có thể thực thi các câu lệnh giống như các câu lệnh tại một thời điểm - sẽ không có đồng thời.

Giải pháp thay thế là phân tích các yêu cầu của bạn chi tiết hơn, điều này không thể thực hiện được nếu không hiểu tại sao bạn cập nhật bảng, dữ liệu dùng để làm gì, v.v.

Ví dụ, câu lệnh này có thực sự cần thiết trong giao dịch không? Nó có mùi giống như dịch vụ dọn phòng:

  DELETE FROM [dbo].[t_Log_2] 
  WHERE [idtm]<'2011-03-12 08:41:57';

Nếu bạn lấy nó ra khỏi giao dịch và đặt nó vào một lô riêng biệt, bạn có thể thấy vấn đề sẽ biến mất.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server FOR XML Path tạo các nút lặp lại

  2. OLTP trong bộ nhớ:Có gì mới trong SQL Server 2016

  3. 6 Hàm lấy Ngày, Tháng và Năm từ một Ngày trong SQL Server

  4. Chuyển số thành từ trong SQL

  5. Chọn truy vấn ánh xạ SQL