24

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

连接迷你分析器的最佳方法是什么?是否有现有的扩展来做到这一点?

4

1 回答 1

38

我刚刚设置了MiniProfiler以将结果保存到 SQL Azure,这相当容易。我们使用MiniProfiler.MVC3来处理所有的接线,如此所述。

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

在撰写本文时,这里直接链接到最新的表创建脚本。

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

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

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

System.Data.SqlClient.SqlException

此版本的 SQL Server 不支持没有聚集索引的表。请创建聚集索引并重试。

为了解决这个问题,我必须在表中添加一个额外的(未使用的)列MiniProfilers。以下是相关创建表脚本的开头:

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 的更改已作为拉取请求提供并被接受。谢谢贾罗德

于 2013-02-08T15:20:19.193 回答