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

Bất kỳ nhược điểm nào khi sử dụng ExecuteReaderAsync từ C # AsyncCTP

Tôi không đồng ý với Ricka về điều này. Các lệnh Async DB không chỉ tốt mà còn rất quan trọng trong việc đạt được quy mô, thông lượng độ trễ. Sự phản đối của anh ấy về thời gian tăng tốc của nhóm luồng chỉ áp dụng cho một máy chủ web có lưu lượng truy cập thấp.

Trong tình huống lưu lượng truy cập cao (đó là điều duy nhất quan trọng), nhóm chủ đề sẽ không phải chờ 'tiêm' các chủ đề mới. Thực hiện không đồng bộ các Lệnh SQL không chỉ quan trọng từ quan điểm về tình trạng yêu cầu / luồng của máy chủ web mà còn từ quan điểm về tổng thời gian tồn tại / độ trễ của yêu cầu:các lệnh gọi DB không liên quan có thể được thực hiện song song, trái ngược với tuần tự. Điều này thường dẫn đến những cải thiện đáng kể về độ trễ của yêu cầu HTTP mà người dùng đã trải qua. Nói cách khác, các trang của bạn tải nhanh hơn.

Tuy nhiên, một lời khuyên:SQL Command không thực sự không đồng bộ cho đến khi bạn bật Asynchronous Processing=true trên chuỗi kết nối. Mặc dù điều này không được đặt (và theo mặc định thì không, Chỉnh sửa:bắt đầu với .NET Framework <4.5. Asynchronous Processing không còn cần thiết ) lệnh gọi 'asyncronous' của bạn tới BeginExecuteReader không có gì khác ngoài một trò giả mạo, cuộc gọi sẽ khởi chạy một chuỗi và chặn that chủ đề. Khi bật xử lý không đồng bộ thực sự trong chuỗi kết nối thì cuộc gọi thực sự không đồng bộ và cuộc gọi lại dựa trên sự hoàn thành IO.

Một lời cảnh báo:lệnh SQL không đồng bộ sẽ hoàn thành ngay sau lần đầu tiên kết quả trả về máy khách và kết quả là các tin nhắn thông tin được tính.

create procedure usp_DetailsTagsGetAllFromApprovedPropsWithCount
as
begin
print 'Hello';
select complex query;
end

Bạn đã mất tất cả các lợi ích của async. print tạo ra một kết quả được gửi lại cho máy khách, kết quả này sẽ hoàn thành lệnh không đồng bộ và việc thực thi trên máy khách sẽ tiếp tục và tiếp tục với 'reader.Read ()'. Bây giờ đó sẽ chặn cho đến khi truy vấn phức tạp bắt đầu tạo ra kết quả. Bạn hỏi 'ai đặt print trong thủ tục? ' nhưng print có thể được ngụy trang bằng thứ gì đó khác, có thể là thứ gì đó trông vô tội như một INSERT thực thi mà không lần đầu tiên phát hành SET NOCOUNT ON .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để thực thi một thủ tục được lưu trữ MSSQL với Thư viện PHP ADOdb?

  2. SQL:Like vs Contains - Kết quả khác nhau

  3. Định dạng ngày trung tính văn hóa cho SQL Server là gì

  4. Không thể biên dịch thành phần SSIS; Thiếu lắp ráp trong Visual Studio 2008

  5. SQL đệ quy CTE:Tìm các đối tượng được liên kết bởi thuộc tính