我想将MVC MiniProfiler的结果保存到sql server数据库。我分析了一个高负载的mvc4页面,以发现一个棘手的性能问题,这个问题在我们的测试或开发系统上是不可重现的,只是偶尔在生产服务器上发生。
连接迷你探查器的最佳方法是什么?是否有现成的扩展名?
答案 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。