我想将 MVC MiniProfiler 的结果保存到 sql server 数据库中。我分析了一个高负载 mvc4 页面以发现一个棘手的性能问题,该问题在我们的测试或开发系统上无法重现,并且仅在生产服务器上偶尔发生。
连接迷你分析器的最佳方法是什么?是否有现有的扩展来做到这一点?
我想将 MVC MiniProfiler 的结果保存到 sql server 数据库中。我分析了一个高负载 mvc4 页面以发现一个棘手的性能问题,该问题在我们的测试或开发系统上无法重现,并且仅在生产服务器上偶尔发生。
连接迷你分析器的最佳方法是什么?是否有现有的扩展来做到这一点?
我刚刚设置了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)
希望有帮助。
更新