如何存储MVC MiniProfiler结果

时间:2013-02-04 20:54:39

标签: asp.net-mvc mvc-mini-profiler

我想将MVC MiniProfiler的结果保存到sql server数据库。我分析了一个高负载的mvc4页面,以发现一个棘手的性能问题,这个问题在我们的测试或开发系统上是不可重现的,只是偶尔在生产服务器上发生。

连接迷你探查器的最佳方法是什么?是否有现成的扩展名?

1 个答案:

答案 0 :(得分:36)

我刚刚设置MiniProfiler将结果保存到SQL Azure,这很容易。我们正在使用MiniProfiler.MVC3来处理here所述的所有连接。

表创建脚本嵌入到具有SqlServerStorage.TableCreationScript静态字段的程序集中,因此您可以使用它,但在深入研究代码时,我发现最新的开发分支通过添加一些索引来略微增强了脚本。表结构在其他方面没有变化,因此它仍然可以使用nuget上提供的最新包。

在将here is direct link写入最新的表格创建脚本时。

之后,您唯一需要做的就是设置MiniProfiler以使用单行代码的SQL:

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

如果您没有使用SQL Azure,就是这样,但是当我们尝试在Azure中使用它时,我发现了一个问题。当分析尝试保存时,我收到以下异常(谢谢ELMAH):

  

System.Data.SqlClient.SqlException

     

此版本的SQL Server不支持没有聚簇索引的表。请创建聚簇索引,然后重试。

要解决这个问题,我必须在MiniProfilers表中添加一个额外的(未使用的)列。以下是有问题的create table脚本的开头:

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,

由于Guid Id列不再是主键,我添加了一个额外的索引以确保查找仍然很快:

create unique nonclustered index IX_MiniProfilers_Id on MiniProfilers (Id)

希望有所帮助。


<强>更新

支持SQL Azure的更改已作为Pull Request提供并已接受。谢谢Jarrod