2013-02-04 10 views
22

Chcę zapisać wyniki MVC MiniProfiler do bazy danych serwera sql. Profiluję stronę mvc4 o dużym obciążeniu, aby wykryć problem z wydajnością, który nie jest odtwarzalny w naszym systemie testowym lub programistycznym i występuje sporadycznie tylko na serwerze produkcyjnym.jak przechowywać wyniki MVC MiniProfiler

Jaki jest najlepszy sposób podłączenia do mini profilera? Czy istnieje jakieś rozszerzenie, aby to zrobić?

+0

Znalazłem interfejs IStorage w źródłach mini profilera, ale wydaje się, że nie jest on dobrze udokumentowany. – NickD

Odpowiedz

35

Właśnie zostałem konfigurowania MiniProfiler, aby zapisać wyniki do SQL Azure, to jest dość łatwe. Używamy MiniProfiler.MVC3 do dbania o wszystkie okablowanie zgodnie z opisem here.

Utworzony skrypt jest osadzony w zespole ze statycznym polem SqlServerStorage.TableCreationScript, więc możesz go użyć, ale podczas wkopywania się w kod znalazłem, że najnowsza gałąź rozwojowa nieznacznie ulepszyła skrypt, dodając niektóre indeksy. Struktura tabeli nie została zmieniona, więc nadal działa z najnowszym pakietem dostępnym pod numerem nuget.

W czasie pisania here is direct link do najnowszej tabeli utworzyć skrypt.

Po że jedyną rzeczą, którą musisz zrobić, to set-up MiniProfiler używać SQL z pojedynczego wiersza kodu:

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

Jeśli nie używasz SQL Azure, to wszystko, ale znalazłem jeden problem, kiedy próbowaliśmy go użyć na platformie Azure. Otrzymałem następujący wyjątek (dziękuję ELMAH) podczas profilowania próbował ratować:

System.Data.SqlClient.SqlException

tabele bez indeksu klastrowego nie są obsługiwane w tej wersji programu SQL Server. Utwórz indeks klastrowy i spróbuj ponownie.

Aby rozwiązać ten problem, musiałem dodać dodatkową (nieużywaną) kolumnę do tabeli MiniProfilers. Oto początek utworzyć tabelę skryptu w pytaniu:

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, 

A ponieważ kolumna Guid Id już nie klucz podstawowy, dodałem dodatkowy wskaźnik, aby zapewnić wyszukiwań są nadal szybko:

create unique nonclustered index IX_MiniProfilers_Id on MiniProfilers (Id) 

Nadzieję, że pomaga.


Aktualizacja

Zmiana wspierać SQL Azure został dostarczony jako Pull Request i zaakceptowane. Dziękujemy Jarrod.

+0

Doskonała odpowiedź! –

+1

dzięki! btw. czy mogę wyłączyć wyświetlanie profilera? – NickD

+1

@Snoopy Tak, wczytano wczoraj możliwość wstępnego ukrywania wyników profilera (https://github.com/SamSaffron/MiniProfiler/commit/85609b6226eff71ac21dfa990dd1fa54aace237f); Nie zrobiłem aktualizacji nuget, ale możesz pobrać najnowsze źródło i kompilację. –

Powiązane problemy