原文:.net core 下监控Sql的执行语句

最近在编写.net core程序,因为数据库从Sql Server 切换到 MySql的原因,无法直接查看sql的具体语句,随着业务量的剧增,痛苦也与日俱增,为了彻底解决该问题,我在github、stackoverflow等站点不断搜索,试图找到一个好的办法。

搜索的结果大都是这样的:

  1. SHOW VARIABLES LIKE "general_log%";
  2. SET GLOBAL general_log = 'ON';

好嘞,试过以后发现果然灵验,BUT,我没有权限操作mysql的计算机,my god,此路不通~~~~

最近搜索时再次发现MiniProfiler库有更新~~

dotnet core支持不错,终于看到希望了~~~

那就开始集成吧,如果你是asp.net core工程,就参考文档吧,

如果是控制台程序,那就按照步骤开始吧:

step 1:安装nuget包 MiniProfiler.EntityFrameworkCore ,目前仍是alpha版本。

【step 2】: 开启EF core的监控初始化 ,如果你使用EF Core的话

  1. var initializer = new DiagnosticInitializer(new[] { new RelationalDiagnosticListener() });
  2. initializer.Start();

【step 2】:开启Dapper的链接监控初始化,如果你使用Dapper的话

 

  

  1. private DbConnection GetConnection()
  2. {
  3.     DbConnection conn = new MySqlConnection(MySqlDBContextOptionBuilder.GetDbConnectionString(DbInfo));
  4.      if (MiniProfiler.Current != null)
  5.      {
  6.       conn = new StackExchange.Profiling.Data.ProfiledDbConnection(conn, MiniProfiler.Current);
  7.      }
  8.       conn.Open();
  9.       return conn;
  10. }

step 3:启动监控,在你的执行代码上增加如下代码

  1. var profiler = MiniProfiler.StartNew(m);
  2. using (profiler.Step("SqlProfile"))
  3. {
  4.    // 你的代码
  5. }
  6. // 输出日志
  7. if (profiler?.Root != null)
  8. {
  9.   var p = profiler.Root;
  10.   Trace.WriteLine($"{p.Name}:{p.Id},{p.DurationMilliseconds} ms");
  11.   if (p.HasChildren)
  12.   {
  13.     p.Children.ForEach(x =>
  14.     {
  15.       Trace.WriteLine($"{p.Name}:{x.Name},st:{x.StartMilliseconds} ms,exec:{x.DurationMilliseconds} ms");
  16.       if (x.CustomTimings?.Count > 0)
  17.       {
  18.         foreach (var ct in x.CustomTimings)
  19.         {
  20.           Trace.WriteLine($"{p.Name}:Start {ct.Key} ---  ");
  21.           ct.Value?.ForEach(y =>
  22.           {
  23.             Trace.WriteLine($"{p.Name}:{y.CommandString}");
  24.             Trace.WriteLine($"{p.Name}:Execute time :{y.DurationMilliseconds} ms,Start offset :{y.StartMilliseconds} ms,Errored :{y.Errored}");
  25.           });
  26.           Trace.WriteLine($"{p.Name}:End {ct.Key} ---  ");
  27.         }
  28.       }
  29.     });
  30.   }
  31. }
  32. profiler?.StopAsync(true).ConfigureAwait(false);
  1. var profiler = MiniProfiler.StartNew(m);
  2. using (profiler.Step("SqlProfile"))
  3. {
  4.    // 你的代码
  5. }
  6. // 输出日志
  7. if (profiler?.Root != null)
  8. {
  9.   var p = profiler.Root;
  10.   Trace.WriteLine($"{p.Name}:{p.Id},{p.DurationMilliseconds} ms");
  11.   if (p.HasChildren)
  12.   {
  13.     p.Children.ForEach(x =>
  14.     {
  15.       Trace.WriteLine($"{p.Name}:{x.Name},st:{x.StartMilliseconds} ms,exec:{x.DurationMilliseconds} ms");
  16.       if (x.CustomTimings?.Count > 0)
  17.       {
  18.         foreach (var ct in x.CustomTimings)
  19.         {
  20.           Trace.WriteLine($"{p.Name}:Start {ct.Key} ---  ");
  21.           ct.Value?.ForEach(y =>
  22.           {
  23.             Trace.WriteLine($"{p.Name}:{y.CommandString}");
  24.             Trace.WriteLine($"{p.Name}:Execute time :{y.DurationMilliseconds} ms,Start offset :{y.StartMilliseconds} ms,Errored :{y.Errored}");
  25.           });
  26.           Trace.WriteLine($"{p.Name}:End {ct.Key} ---  ");
  27.         }
  28.       }
  29.     });
  30.   }
  31. }
  32. profiler?.StopAsync(true).ConfigureAwait(false);

****

在此我向大家推荐一个微服务架构学习交流群。交流学习群号:864759589  里面会分享一些资深架构师录制的视频录像:高并发、高性能、分布式、微服务架构的原理,分布式架构等这些成为架构师必备的知识体系。


**** 

### 引用链接

1. [口袋代码仓库](http://codeex.cn)

2. [在线计算器](http://jisuanqi.codeex.cn)

3. 本节源码:[github](https://github.com/webmote-org/)

.net core 下监控Sql的执行语句的更多相关文章

  1. 监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)

    原文:监控SQL:执行表中所有sql语句.记录每个语句运行时间(3) 通过执行一个 带参数的存储过程  exec  OpreateTB('OpreateUser','IsRun')  更新表的数据 表 ...

  2. SQL 2008执行语句遇到内存不足(1)——error 701

    原文:SQL 2008执行语句遇到内存不足(1)--error 701 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/17/sql-2008-e ...

  3. robot framework ——关键字run keyword if 如何在一个条件下接多个执行语句,以及如何写复杂条件句

    曾一度疯狂搜索run keyword if 的用法,帖子是挺多的,可惜,没有一个我想要的.现在我终于把我想要的用法,收集好了,在此总结下. 1.曾经天真的以为  run keyword if +条件 ...

  4. 拼接SQL执行语句时,对单引号的处理

    例: declare @SQL nvarchar(1000); declare @str nvarchar(100); set @str='Joe''s NB'; // 打印出来的应该是这样:Joe' ...

  5. SQL SERVER 执行计划各字段注释

    SET SHOWPLAN_ALL使 Microsoft® SQL Server™ 不执行 Transact-SQL 语句.相反,SQL Server 返回有关语句执行方式和语句预计所需资源的详细信息. ...

  6. 4.5 .net core下直接执行SQL语句并生成DataTable

    .net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...

  7. .net core下直接执行SQL语句并生成DataTable

    .net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...

  8. 应用Druid监控SQL语句的执行情况

    Druid是什么? Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...

  9. 浅析SqlServer简单参数化模式下对sql语句自动参数化处理以及执行计划重用

    我们知道,SqlServer执行sql语句的时候,有一步是对sql进行编译以生成执行计划, 在生成执行计划之前会去缓存中查找执行计划 如果执行计划缓存中有对应的执行计划缓存,那么SqlServer就会 ...

随机推荐

  1. Flume Interceptors官网剖析(博主推荐)

    不多说,直接上干货! Flume Sources官网剖析(博主推荐) Flume Channels官网剖析(博主推荐) Flume Channel Selectors官网剖析(博主推荐) Flume ...

  2. openGLES(三)

    着色器语言 ​ 着色器语言基于c/c++语言,但是还是有区别的,它不是面向对象 数据类型概述 ​ 内建的数据类型:浮点型(float).布尔型(bool).整形(int),矩阵(matrix)以及向量 ...

  3. nuxt.js配置BASE_URL(基本域名)和NODE_ENV(环境变量)

    一直以来,开发环境和生产环境的数据接口域名不一样总是困扰着我 每次打测试包或者线上包,我都得手动切换域名,我相信很多人的做法跟这差不多,类似下面这样: (你已经注意到,这个文件已经被我无情的删除了,因 ...

  4. POJ2029:Get Many Persimmon Trees(二维树状数组)

    Description Seiji Hayashi had been a professor of the Nisshinkan Samurai School in the domain of Aiz ...

  5. Android 设置背景透明度

    一些时候,我们须要为UI页面设置背景色,例如以下图所看到的: 上图已注: 背景颜色为#000000,透明度为40%: 那么.怎样在代码中表示呢? 首先须要了解: 颜色和不透明度 (alpha) 值以十 ...

  6. oled模块的驱动芯片和pcb图

    参考自:http://blog.sina.com.cn/s/blog_57ad1bd20102wtq8.html oled的驱动芯片是:SSD1306驱动芯片,这个芯片嵌入在屏幕里面,从外面看不出来, ...

  7. stm32单片机下载方式

    引用   编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2015/1012/article_22873.html 第一种 ISP下载: 这里类似51. boot1 ...

  8. jni和C++通信中文乱码的问题

    转自 http://www.cnblogs.com/bluesky4485/archive/2011/12/13/2285802.html 首先,需要明确几个关于编码的基本概念: java内部是使用的 ...

  9. ZJOI2002昂贵的聘礼题解

    http://codevs.cn/problem/1324/ 题目大意 一个部落,你能够和社会地位等级的极差不大于M的全部人交易.你能够拿金币直接从一个人手里买东西,也能够从别人那里买到那个人想要的东 ...

  10. EL表达式.md

    操作符 描述 . 访问一个Bean属性或者一个映射条目 [] 访问一个数组或者链表的元素 ( ) 组织一个子表达式以改变优先级 + 加 - 减或负 * 乘 / or div 除 % or mod 取模 ...