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

SQL Server:Rò rỉ mức cách ly trên các kết nối được gộp chung

Nhóm kết nối gọi sp_resetconnection trước khi tái chế một kết nối. Đặt lại mức cô lập giao dịch không có trong danh sách những việc mà sp_resetconnection thực hiện. Điều đó sẽ giải thích tại sao "có thể tuần tự hóa" bị rò rỉ trên các kết nối được gộp chung.

Tôi đoán bạn có thể bắt đầu từng truy vấn bằng cách đảm bảo rằng nó ở mức cô lập phù hợp:

if not exists (
              select  * 
              from    sys.dm_exec_sessions 
              where   session_id = @@SPID 
                      and transaction_isolation_level = 2
              )
    set transaction isolation level read committed

Một tùy chọn khác:các kết nối với một chuỗi kết nối khác không chia sẻ một nhóm kết nối. Vì vậy, nếu bạn sử dụng một chuỗi kết nối khác cho các truy vấn "có thể tuần tự hóa", chúng sẽ không chia sẻ một nhóm với các truy vấn "đã đọc cam kết". Một cách dễ dàng để thay đổi chuỗi kết nối là sử dụng thông tin đăng nhập khác. Bạn cũng có thể thêm một tùy chọn ngẫu nhiên như Persist Security Info=False; .

Cuối cùng, bạn có thể đảm bảo rằng mọi truy vấn "có thể tuần tự hóa" sẽ đặt lại mức cô lập trước khi nó quay trở lại. Nếu không hoàn thành được truy vấn "serializable", bạn có thể xóa nhóm kết nối để buộc kết nối bị nhiễm bẩn ra khỏi nhóm:

SqlConnection.ClearPool(yourSqlConnection);

Điều này có thể tốn kém, nhưng các truy vấn không thành công là rất hiếm, vì vậy bạn không cần phải gọi ClearPool() thường xuyên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lấy OBJECT_NAME () từ Cơ sở dữ liệu khác trong SQL Server

  2. Nhóm SQL Server AlwaysOn Av sẵn sàng:Cài đặt và Cấu hình. Phần 2

  3. SQL Server 2016:Tạo cơ sở dữ liệu

  4. Truy vấn Chọn SUM của tôi trả về giá trị rỗng. Nó sẽ trả về 0

  5. Tìm, ưu tiên và giải quyết các sự cố máy chủ SQL trong vài phút