2013-02-04 35 views
22

Tôi muốn lưu kết quả của MVC MiniProfiler vào cơ sở dữ liệu máy chủ sql. Tôi hồ sơ một trang mvc4 tải cao để phát hiện một vấn đề hiệu suất khôn lanh mà không thể tái sản xuất trên hệ thống thử nghiệm hoặc phát triển của chúng tôi và chỉ xảy ra không thường xuyên trên máy chủ sản xuất.cách lưu trữ kết quả MVC MiniProfiler

Cách tốt nhất để móc vào hồ sơ nhỏ là gì? Có phần mở rộng hiện tại để làm điều đó không?

+0

tôi đã tìm thấy giao diện IStorage trong các nguồn trình thu nhỏ, nhưng có vẻ như không được ghi chép đầy đủ. – NickD

Trả lời

35

Tôi vừa thiết lập MiniProfiler để lưu kết quả vào SQL Azure, nó khá dễ dàng. Chúng tôi đang sử dụng MiniProfiler.MVC3 để xử lý tất cả các hệ thống dây điện như mô tả here.

Kịch bản tạo bảng được nhúng vào assembly với trường tĩnh SqlServerStorage.TableCreationScript, vì vậy bạn có thể sử dụng, nhưng trong khi đào sâu vào mã tôi thấy chi nhánh phát triển mới nhất đã tăng cường kịch bản một chút bằng cách thêm một số chỉ mục. Cấu trúc bảng không thay đổi, do đó nó vẫn hoạt động với gói mới nhất có sẵn trên nuget.

Tại thời điểm viết here is direct link vào bảng mới nhất tạo tập lệnh.

Sau đó điều duy nhất bạn cần làm là thiết lập MiniProfiler sử dụng SQL với dòng mã:

MiniProfiler.Settings.Storage = new SqlServerStorage("<your connection string>"); 

Nếu bạn không sử dụng SQL Azure, đó là nó, nhưng tôi tìm thấy một vấn đề khi chúng tôi cố gắng sử dụng nó trong Azure. Tôi nhận được ngoại lệ sau đây (cảm ơn bạn ELMAH) khi profiling cố gắng tiết kiệm:

System.Data.SqlClient.SqlException

Bàn mà không có một nhóm chỉ số không được hỗ trợ trong phiên bản này của SQL Server. Vui lòng tạo chỉ mục nhóm và thử lại.

Để giải quyết vấn đề này, tôi phải thêm cột bổ sung (chưa sử dụng) vào bảng MiniProfilers. Đây là sự khởi đầu của tạo bảng kịch bản trong câu hỏi:

create table MiniProfilers 
(
    RowId integer not null identity constraint PK_MiniProfilers primary key clustered, -- Need a clustered primary key for SQL azure 
    Id uniqueidentifier not null, 
    Name nvarchar(200) not null, 

Và kể từ cột Id Guid đã không còn là khóa chính, tôi đã thêm một chỉ số bổ sung để đảm bảo tra cứu vẫn còn nhanh:

create unique nonclustered index IX_MiniProfilers_Id on MiniProfilers (Id) 

Hy vọng rằng sẽ giúp.


Cập nhật

Sự thay đổi để hỗ trợ SQL Azure đã được cung cấp như một Pull Request và chấp nhận. Cảm ơn Jarrod.

+0

Câu trả lời hay! –

+1

cảm ơn !!! btw. tôi có thể tắt hiển thị profiler không? – NickD

+1

@Snoopy có, khả năng [ban đầu ẩn kết quả profiler] (https://github.com/SamSaffron/MiniProfiler/commit/85609b6226eff71ac21dfa990dd1fa54aace237f) đã được kiểm tra trong ngày hôm qua; Tôi chưa thực hiện cập nhật nuget, nhưng bạn có thể lấy nguồn mới nhất và xây dựng từ đó. –

Các vấn đề liên quan