目录

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等)
  • 参数化查询语句
  • 调用堆栈定位

效果图

https://i-blog.csdnimg.cn/direct/65f348cd1249456fb6256fe70e6bd408.jpeg


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();
    // 自动跟踪异步查询
}

常见问题排查

  1. 页面未显示图标 ➜ 检查中间件顺序(需在UseRouting之后)
  2. SQL未被记录 ➜ 检查是否启用AddEntityFramework()
  3. 生产环境使用 ➜ 设置options.EnableDebugMode = false

建议在开发环境使用,可通过 /profiler/results 路径控制访问权限。重点关注超过100ms的查询,结合执行计划进行深度优化。