MiniProfiler分析SQL性能
目录
MiniProfiler分析SQL性能
1. 安装与配置
bash
# ASP.NET Core 安装
dotnet add package MiniProfiler.AspNetCore
dotnet add package MiniProfiler.EntityFrameworkCore
# 传统 ASP.NET 安装
Install-Package MiniProfiler
2. 基础配置( Core 示例)
csharp
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMiniProfiler(options =>
{
options.RouteBasePath = "/profiler";
options.TrackConnectionOpenClose = true; // 跟踪数据库连接
}).AddEntityFramework();
}
public void Configure(IApplicationBuilder app)
{
app.UseMiniProfiler();
// 确保在其他中间件前调用
}
3. 启用 SQL 监控
csharp
// 在需要分析的代码块中使用
using(MiniProfiler.Current.Step("Index test all"))
{
var blogs = _bloggingContext.Blogs.Where(a=>a.BlogId > 0).ToList();
Console.WriteLine("A");
Thread.Sleep(1000);
using(MiniProfiler.Current.Step("step 1"))
{
Console.WriteLine("1");
Thread.Sleep(1000);
}
using(MiniProfiler.Current.Step("step 2"))
{
Console.WriteLine("2");
Thread.Sleep(1000);
}
}
4. 查看分析结果
访问
http://your-domain/profiler/results-index
查看实时监控页面,SQL 查询会显示:
- 执行时间(毫秒)
- 命令类型(SELECT/UPDATE等)
- 参数化查询语句
- 调用堆栈定位
效果图
5. 关键功能详解
sql
-- 示例输出 --
SELECT * FROM Users WHERE Id = @p0 -- @p0 = 123
Duration: 15.7ms
红色警告 :表示未参数化查询(需优化)
黄色警告 :重复查询可能产生N+1问题
6. 高级技巧
csharp
// 自定义分析阈值
options.SqlStackTraces = true;
options.TrivialDurationThreshold = 5; // 超过5ms显示警告
// 异步操作跟踪
await using (var conn = new SqlConnection(...))
{
await conn.OpenAsync();
// 自动跟踪异步查询
}
常见问题排查
- 页面未显示图标 ➜ 检查中间件顺序(需在UseRouting之后)
- SQL未被记录 ➜ 检查是否启用AddEntityFramework()
- 生产环境使用 ➜ 设置options.EnableDebugMode = false
建议在开发环境使用,可通过
/profiler/results
路径控制访问权限。重点关注超过100ms的查询,结合执行计划进行深度优化。