Thực hiện cùng một yêu cầu từ C # VS SSMS cho thời gian thực hiện khác nhau


12

Tôi có một yêu cầu như thế này

SELECT 
[EstimateId], 
[CreationUserId], 
[EstimateStatusValueId], 
[LanguageId], 
[LocationId], 
[EstimatorUserId], 
[FilterUnitSystemTypeId], 
[EstimateNumber], 
[RevisionNumber], 
[CreationDate], 
[ModificationDate], 
[ProjectDescription], 
[IsBsdq], 
[ClosingDate], 
[ClosingTime], 
[ClosingUpdatedOn], 
[DeadLineDate], 
[IsReceived], 
[Inclusion], 
[Exclusion], 
[Misc], 
[Note], 
[WorkDeadLines], 
[Comments], 
[Validity], 
[PlansLocation], 
[PlansReceivedFrom], 
[Price]
FROM [Estimate].[Estimates] 
ORDER BY [ClosingDate] ASC, [ClosingTime] ASC

Khi tôi chạy truy vấn này trong SSMS, tôi nhận được thời gian thực hiện là 953ms, nhưng khi tôi chạy truy vấn này từ Truy vấn Linq trong C # của tôi, tôi nhận được thời gian thực hiện là 1813ms.

Truy vấn Linq sử dụng ".Net SqlClient Data Carrier" và được cấp cho EntityFramework (tệp EDMX). Đây có phải là một vấn đề?

Có ai biết tại sao tôi có một sự khác biệt lớn giữa thời gian thực hiện của các yêu cầu đó giống nhau nhưng thực hiện từ bối cảnh khác nhau đối với cùng một cơ sở dữ liệu không?

Tôi đã xác minh tất cả các kế hoạch thực hiện của cả hai yêu cầu và họ sử dụng cùng một chỉ mục để đáp ứng truy vấn tương ứng của họ.

Để xem kế hoạch thực hiện của yêu cầu C #, tôi sử dụng trình lược tả SQL để bẫy sự kiện Show Plan XML và tôi so sánh nó với một trong SSMS và cả hai đều giống nhau.


chỉ là một câu hỏi nhỏ - tại sao bạn chọn tất cả dữ liệu của bảng mà không có bất kỳ điều kiện tìm kiếm nào? Bạn có thực sự cần tất cả dữ liệu trong ứng dụng mà không cần lọc không?
Mary

Có, đây là một tính năng mà tôi cần nhưng tính năng này sẽ không được sử dụng thường xuyên. Tôi biết rằng không phải là tối ưu để đưa ra một truy vấn lớn mà không có mệnh đề where.
Nico

Dù sao, mối quan tâm của tôi không phải là yêu cầu mà là sự khác biệt giữa thời gian thực hiện. Tôi cho bạn thấy truy vấn này nhưng tất cả các truy vấn đều cho kết quả tương tự. Tại sao ?
Nico

Câu trả lời:


6

Đây có phải là nhất quán, thời gian?

Tôi thấy một sự khác biệt CPU có thể được biên dịch thời gian. Có bất kỳ cài đặt LINQ nào ảnh hưởng đến điều này?

Biên tập:

  • Nắm bắt các kế hoạch trong Profiler
  • Bạn có chắc chắn SQL giống nhau trong Profiler không?

Vâng, đó là thời gian nhất quán sau thời gian. Tôi không biết cài đặt linq. nhưng tôi đã tìm thấy liên kết này codeproject.com/KB/cs/linqsql2.aspx
Nico

Bạn có thể thấy kế hoạch trong hình trên cho cả hai truy vấn. Vâng, tôi chắc chắn rằng SQL là giống nhau trong profiler. Ứng dụng SQL, Profiler, SSMS và C # đều được lưu trữ trên máy tính của tôi cho mục đích phát triển.
Nico

Nắm bắt kế hoạch thực tế trong XML từ Profiler. Không phải từ bộ nhớ cache. Bạn có phản hồi khác nhau nhưng bạn có thể hiển thị một kế hoạch khác = kế hoạch sai được hiển thị ở trên có thể
gbn


3

Bạn sẽ muốn xem xét các kế hoạch Thực hiện cho hai truy vấn và xem chúng khác nhau ở đâu.


tôi chỉ chỉnh sửa bài viết của mình ... và tôi đã xác minh rằng cả hai truy vấn đều sử dụng cùng một kế hoạch.
Nico

1
Tôi chỉ thêm sự kiện mà bạn nói với tôi vào hồ sơ và nó giống như yêu cầu cuối cùng của tôi mà tôi đăng trong câu hỏi của mình. Tôi có cùng một kế hoạch .. bất kỳ ý tưởng nào khác ...
Nico

2
Mọi thứ có vẻ đúng. Điều duy nhất có thể giải thích nó sẽ là nếu ứng dụng .NET không nhận được dữ liệu đủ nhanh. Thời gian được báo cáo trong SQL Profiler bao gồm lượng thời gian để truyền dữ liệu từ máy chủ đến máy khách. Vì vậy, nếu khách hàng không tải xuống mọi thứ đủ nhanh, thời gian chạy được báo cáo sẽ lâu hơn.
mrdenny

2
Sau đó là phần ứng dụng đang làm gì với dữ liệu và cách đọc dữ liệu từ cơ sở dữ liệu.
mrdenny

3
Để hỗ trợ cho câu trả lời của mrdenny, tôi nói thêm rằng tôi đã kiểm tra một truy vấn trong 3 máy khách SQL khác nhau và thời gian báo cáo của chúng đều khác nhau mặc dù số liệu thống kê và thực hiện IO của các kế hoạch là giống hệt nhau. Tất cả là do cách thức nội bộ của khách hàng đối xử với dữ liệu. Tôi tin rằng bạn có thể nhận được kết quả thời gian khác nhau bằng cách xuất ra một tệp, vào lưới trong Management Studio hoặc đầu ra văn bản. Dù sao, từ những gì tôi nhớ, tài liệu nói rằng SQL sẽ luôn nhanh hơn LINQ sang SQL, vì vậy đây không phải là một điều ngạc nhiên :-).
Mary
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.