针对ADO.Net的C#数据访问跟踪 - 需要执行分析器检查多线程之间共享的连接是什么

问题描述:

我试图使用ETW启用数据访问跟踪,如this article中所述。针对ADO.Net的C#数据访问跟踪 - 需要执行分析器检查多线程之间共享的连接是什么

要验证它是否跟踪事件,我创建了一个简单的控制台应用程序,而不是MVC应用程序,因为它在文章中。代码如下,它打算抛出,所以我可以验证跟踪工作。

var connectionString = "Data Source=local;Trusted_Connection = True; Initial Catalog = Data; Timeout = 2; Max Pool Size = 4"; 
using (var conn = new SqlConnection(connectionString)) 
{ 
    using (var command = new SqlCommand("SELECT * FROM DATA", conn)) 
    { 
     conn.Open(); 
     var reader = command.ExecuteReader(); 
     using (var data = new SqlCommand("SELECT * FROM PEOPLE", conn)) 
     { 
      var reader1 = command.ExecuteReader(); 
     } 
    } 
} 

我正在使用.Net Framework v4.0.30319。 理想情况下,我想跟踪线程之间共享的连接对象。任何帮助将非常感激!

感谢

+0

[注册的MOF](https://msdn.microsoft.com/en-us/library/cc765421.aspx),用[Perview](https://*.com/a/46022660/1466046) - > Collect-> provider-browser并添加ADO.net和SQL的所有内容,点击开始并运行你的代码。在代码运行后,转到perfview并停止日志记录并查找ADO/SQL事件 – magicandre1981

TL; DR尝试注册其他的.dll/MOF对而不是在导游推荐的一个。

手动注册DLL的步骤

  • (从this MS导经修饰的)添加以下注册表项

    HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ BidInterface \装载机

  • 创建一个新的字符串值(注意键中的':')和修改...

    值名称 = “:路径”

    值数据 = “C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ AdoNetDiag.dll”

  • 使用mofcomp.exe注册ETW提供程序(使用Windows安装)

    mofcomp.exe C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ adonetdiag.mof

测试:

logman start test -p "System.Data.1" -o test.etl -ets // Start a trace 
// Do things with ADO.NET (run your sample) 
logman stop test -ets // Stop a started trace 
tracerpt.exe test.etl -of CSV -o dump.csv // make it human readable 

如果事情的来龙去脉,你现在应该有充满的相同目录下的summary.txt和dump.csv文件跟踪信息。祝你好运。


哪个ADONETDIAG.dll你注册了那些步骤?我遵循these(他们似乎是微软公布的,其他人用它们作为指南),并发现它们只能用于一个问题。

我发现的一个问题是,您的机器上可能安装了ADONETDIAG.dll的多个副本 - 并且您注册的DLL文件有例如,我的机器已经安装在下列地点之一

  • C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2.0.50727 \ AdoNetDiag.dll
  • C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ AdoNetDiag.dll
  • C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ AdoNetDiag.dll
  • C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ AdoNetDiag.dll

所有的步骤,我直接找到你于r例如\Framework\v2.0.50727\AdoNetDiag.dll。当我尝试这个时,我没有得到任何日志(我的.etl文件捕获1事件,跟踪开始,并且永远不会超过8KB)。

试验和错误导致发现\Framework64\v4.0.30319\AdoNetDiag.dll为我工作。