asp.net mvc - Cómo almacenar los resultados de MVC MiniProfiler
asp.net-mvc mvc-mini-profiler (1)
Quiero guardar los resultados de MVC MiniProfiler en una base de datos de servidor SQL. Hago un perfil de una página mvc4 de alta carga para detectar un problema de rendimiento difícil que no es reproducible en nuestro sistema de prueba o desarrollo y solo ocurre esporádicamente en el servidor de producción.
¿Cuál es la mejor manera de enganchar en el mini perfilador? ¿Hay una extensión existente para hacer eso?
Acabo de configurar MiniProfiler para guardar los resultados en SQL Azure, es bastante fácil. Estamos usando MiniProfiler.MVC3 para cuidar todo el cableado como se describe here .
La tabla de creación de secuencias de comandos está incrustada en el ensamblaje con el campo estático SqlServerStorage.TableCreationScript
, por lo que puede usar eso, pero al profundizar en el código encontré que la última rama de desarrollo ha mejorado ligeramente la secuencia de comandos agregando algunos índices. De lo contrario, la estructura de la tabla no se modifica, por lo que aún funciona con el último paquete disponible en nuget .
Al momento de escribir SqlServerStorage.TableCreationScript a la última tabla para crear un script.
Después de eso, lo único que debe hacer es configurar MiniProfiler para usar SQL con una sola línea de código:
MiniProfiler.Settings.Storage = new SqlServerStorage("<your connection string>");
Si no estás usando SQL Azure, eso es todo, pero encontré un problema cuando intentamos usarlo en Azure. Recibí la siguiente excepción (gracias a ELMAH ) cuando intenté guardar el perfil:
System.Data.SqlClient.SqlException
Las tablas sin un índice agrupado no son compatibles con esta versión de SQL Server. Por favor, cree un índice agrupado y vuelva a intentarlo.
Para resolver esto tuve que agregar una columna adicional (no usada) a la tabla de MiniProfilers
. Aquí está el comienzo del script de creación de tabla en cuestión:
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,
Y dado que la columna Guid Id ya no era la clave principal, agregué un índice adicional para garantizar que las búsquedas aún sean rápidas:
create unique nonclustered index IX_MiniProfilers_Id on MiniProfilers (Id)
Espero que ayude.
Actualizar
El cambio para admitir SQL Azure se ha proporcionado como una solicitud de extracción y se ha aceptado. Gracias Jarrod .