Đây không phải là câu hỏi "là ORM nhanh nhất", cũng không phải là câu hỏi về "cách viết mã tốt với ORM". Đây là mặt khác: mã được viết, nó đã được phát hành trực tiếp, hàng nghìn người dùng đang truy cập ứng dụng, nhưng có một vấn đề hiệu suất tổng thể được nhận thức. Một dấu vết SQL Profiler chỉ có thể chạy trong một khoảng thời gian ngắn: 5 phút cho vài trăm nghìn kết quả. Câu hỏi này đơn giản là: đã sử dụng SQL Profiler để thu hẹp một số truy vấn chậm (thời lượng lớn hơn một khoảng thời gian nhất định), những kỹ thuật và giải pháp nào tồn tại để truy tìm các truy vấn SQL này trở lại thành phần có vấn đề không? Không. Một câu hỏi releated là nếu một khu vực cụ thể là chậm, làm thế nào chúng ta có thể xác định SQL rằng khu vực này đang thực hiện để nó có thể được lọc thích hợp trong SQL Profiler?Truy tìm hiệu suất ORM
Nền tảng cho điều này là chúng tôi có một ứng dụng khá lớn với cấu trúc bảng khá phức tạp và hiện đang dựa trên việc truy cập dữ liệu thông qua các thủ tục được lưu trữ. Nếu một vấn đề về hiệu suất SQL xuất hiện, thì thường là trường hợp rút ra trình lược tả SQL, tìm hiểu xem có điều gì chậm (lọc theo thời gian) hay không nếu vùng bị phàn nàn chậm (lọc theo thủ tục lưu sẵn) và điều chỉnh các thủ tục lưu sẵn (hoặc lập chỉ mục lược đồ).
Bây giờ có một sự thúc đẩy để chuyển mã của chúng tôi từ giải pháp chủ yếu là sproc sang giải pháp chủ yếu là ORM, tuy nhiên cú đẩy lớn chống lại việc di chuyển là vấn đề hiệu suất. Tôi đã đọc xung quanh và có vẻ như thường xuyên hơn không, nó có thể liên quan đến các công cụ của bên thứ ba (ORM truy tìm các tiện ích như NHProf hoặc .NET truy tìm utils như dottrace) mà chúng tôi cần cài đặt trên máy chủ. Bây giờ liệu các công cụ bổ sung có thể được cài đặt trên môi trường sống hay không là một câu hỏi khác, vì vậy nếu những thứ như thế này có thể được thực hiện mà không cần thêm công cụ, thì đó có thể là tiền thưởng.
Tôi chủ yếu quan tâm đến các giải pháp với SQL Server 2008, nhưng có thể là đủ chung cho mọi RDBMS. Theo như công nghệ ORM, về điều này tôi không tập trung cụ thể như không có gì hiện đang được sử dụng, vì vậy hãy quan tâm để biết các kỹ thuật khác nhau như thế nào (hoặc phổ biến) twixt nHibernate, fluent-nhibernate và Entity Framework. Các ORM khác được chào đón mặc dù nếu chúng cung cấp một cái gì đó khác :-)
Tôi đã đọc qua How to find and fix performance problems (...) và tôi nghĩ vấn đề chỉ đơn giản là phần có "cô lập". Một vấn đề dễ tái sản xuất chỉ trên hệ thống trực tiếp sẽ khó phân lập. Các số liệu tôi trích dẫn trong đoạn 2 là số liệu về các loại mà chúng tôi có thể lấy từ một hồ sơ ...
Nếu bạn có trải nghiệm ORM thực tế trên thế giới, tốt hơn nhiều :-)
Cập nhật, 2016-10-21: Chỉ để hoàn thành, chúng tôi cuối cùng đã giải quyết điều này cho NHibernate bằng cách viết mã và ghi đè phương pháp NHibernate. Chi tiết đầy đủ trong câu hỏi SO khác mà tôi đã hỏi: NHibernate and Interceptors - measuring SQL round trip times. Tôi hy vọng đây sẽ là một cách tiếp cận tương tự cho nhiều ORM khác nhau.
Bạn đã quen thuộc với các DMV và báo cáo khác nhau hiển thị truy vấn hàng đầu theo thời lượng, CPU, IO, v.v ... dựa trên thống kê kế hoạch thực hiện chứ không phải là lược tả? Ngoài ra những gì phiên bản của SQL Server? Nếu năm 2008 có kho dữ liệu quản lý có thể giúp (mặc dù tôi đoán với các truy vấn không được tham số do ORM phát hành, bạn có thể kết thúc với nhiều truy vấn và kế hoạch tương tự làm cho kết quả khó khăn) –
Câu hỏi thú vị, tôi mong được học điều gì đó về chủ đề này vì tôi không có câu trả lời cho bạn. – HLGEM
@Martin - xin lỗi, 2008 (đã chỉnh sửa câu hỏi). Bây giờ bạn đề cập đến DMV, mà chuông reo, sẽ điều tra. Các ứng dụng tại thời điểm này được dựa trên SQL 2000, nhưng phiên bản tiếp theo được nâng lên đến 2008. Không * quá * làm phiền khoảng 2000 giải pháp. Mặc dù một khi chúng ta có truy vấn, làm thế nào để chúng ta theo dõi ngược lại với mô-đun gây ra vấn đề qua lớp ORM? –