2013-02-04 16 views
22

Desidero salvare i risultati di MVC MiniProfiler in un database SQL Server. Profili una pagina mvc4 ad alto carico per individuare un problema di prestazioni insidioso che non è riproducibile sul nostro sistema di test o di sviluppo e si verifica solo sporadicamente sul server di produzione.come memorizzare i risultati MVC MiniProfiler

Qual è il modo migliore per collegarsi al mini profiler? Esiste un'estensione esistente per farlo?

+0

ho trovato l'interfaccia IStorage nelle sorgenti del mini profiler, ma sembra non essere molto ben documentato. – NickD

risposta

35

Ho appena impostato MiniProfiler per salvare i risultati in SQL Azure, è abbastanza semplice. Stiamo utilizzando MiniProfiler.MVC3 per occuparci di tutti i collegamenti come descritto in here.

Lo script di creazione tabella è incorporato nell'assieme con il campo statico SqlServerStorage.TableCreationScript, quindi è possibile utilizzarlo, ma mentre si scava nel codice ho trovato che l'ultimo ramo di sviluppo ha migliorato leggermente lo script aggiungendo alcuni indici. La struttura della tabella è altrimenti invariata, quindi funziona ancora con l'ultimo pacchetto disponibile su nuget.

Al momento della scrittura di here is direct link all'ultimo script di creazione tabella.

Dopo che l'unica cosa che devi fare è di set-up MiniProfiler utilizzare SQL con la sola riga di codice:

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

Se non si sta usando SQL Azure, questo è tutto, ma ho trovato una problema quando abbiamo provato ad usarlo in Azure. Ho ricevuto la seguente eccezione (grazie ELMAH) a profilare cercato di salvare:

System.Data.SqlClient.SqlException

tabelle senza un indice cluster non sono supportati in questa versione di SQL Server. Si prega di creare un indice cluster e riprovare.

Per risolvere questo problema, ho dovuto aggiungere una colonna aggiuntiva (non utilizzata) alla tabella MiniProfilers. Ecco l'inizio dello script creare tabella in questione:

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, 

E dal momento che la colonna Guid ID non era più la chiave primaria, ho aggiunto un indice aggiuntivo per garantire le ricerche sono ancora veloce:

create unique nonclustered index IX_MiniProfilers_Id on MiniProfilers (Id) 

Spero che questo aiuti.


Aggiornamento

Il cambiamento per supportare SQL Azure è stato fornito come Pull Request e accettato. Grazie Jarrod.

+0

Ottima risposta! –

+1

grazie !!! btw. posso disabilitare la visualizzazione del profiler? – NickD

+1

@Snoopy sì, la possibilità di [nascondere inizialmente i risultati del profiler] (https://github.com/SamSaffron/MiniProfiler/commit/85609b6226eff71ac21dfa990dd1fa54aace237f) è stata verificata ieri; Non ho fatto un aggiornamento di nuget, ma puoi ottenere l'ultima fonte e compilare da lì. –

Problemi correlati