博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net core 下监控Sql的执行语句
阅读量:5334 次
发布时间:2019-06-15

本文共 3141 字,大约阅读时间需要 10 分钟。

原文:

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

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

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

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

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

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

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

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

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

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

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

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

 

  

private DbConnection GetConnection(){     DbConnection conn = new MySqlConnection(MySqlDBContextOptionBuilder.GetDbConnectionString(DbInfo));     if (MiniProfiler.Current != null)     {       conn = new StackExchange.Profiling.Data.ProfiledDbConnection(conn, MiniProfiler.Current);     }      conn.Open();      return conn;}

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

var profiler = MiniProfiler.StartNew(m);using (profiler.Step("SqlProfile")){   // 你的代码}// 输出日志if (profiler?.Root != null){  var p = profiler.Root;  Trace.WriteLine($"{p.Name}:{p.Id},{p.DurationMilliseconds} ms");  if (p.HasChildren)  {    p.Children.ForEach(x =>    {      Trace.WriteLine($"{p.Name}:{x.Name},st:{x.StartMilliseconds} ms,exec:{x.DurationMilliseconds} ms");      if (x.CustomTimings?.Count > 0)      {        foreach (var ct in x.CustomTimings)        {          Trace.WriteLine($"{p.Name}:Start {ct.Key} ---  ");          ct.Value?.ForEach(y =>          {            Trace.WriteLine($"{p.Name}:{y.CommandString}");            Trace.WriteLine($"{p.Name}:Execute time :{y.DurationMilliseconds} ms,Start offset :{y.StartMilliseconds} ms,Errored :{y.Errored}");          });          Trace.WriteLine($"{p.Name}:End {ct.Key} ---  ");        }      }    });  }}profiler?.StopAsync(true).ConfigureAwait(false);
var profiler = MiniProfiler.StartNew(m);using (profiler.Step("SqlProfile")){   // 你的代码}// 输出日志if (profiler?.Root != null){  var p = profiler.Root;  Trace.WriteLine($"{p.Name}:{p.Id},{p.DurationMilliseconds} ms");  if (p.HasChildren)  {    p.Children.ForEach(x =>    {      Trace.WriteLine($"{p.Name}:{x.Name},st:{x.StartMilliseconds} ms,exec:{x.DurationMilliseconds} ms");      if (x.CustomTimings?.Count > 0)      {        foreach (var ct in x.CustomTimings)        {          Trace.WriteLine($"{p.Name}:Start {ct.Key} ---  ");          ct.Value?.ForEach(y =>          {            Trace.WriteLine($"{p.Name}:{y.CommandString}");            Trace.WriteLine($"{p.Name}:Execute time :{y.DurationMilliseconds} ms,Start offset :{y.StartMilliseconds} ms,Errored :{y.Errored}");          });          Trace.WriteLine($"{p.Name}:End {ct.Key} ---  ");        }      }    });  }}profiler?.StopAsync(true).ConfigureAwait(false);

****

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

### 引用链接

1. [口袋代码仓库](http://codeex.cn)
2. [](http://jisuanqi.codeex.cn)
3. 本节源码:[github](https://github.com/webmote-org/)

posted on
2019-01-18 10:31 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/10286338.html

你可能感兴趣的文章
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
epoll使用具体解释(精髓)
查看>>
AndroidArchitecture
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
【转】javascript 中的很多有用的东西
查看>>
Android 监听返回键、HOME键
查看>>
Android ContentProvider的实现
查看>>
sqlserver 各种判断是否存在(表名、函数、存储过程等)
查看>>
Recover Binary Search Tree
查看>>
[转]IOCP--Socket IO模型终结篇
查看>>
各种正则验证
查看>>
python中numpy.r_和numpy.c_
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>