我们的数据访问层有单元测试。这有助于发现sql语法错误 现在我们已经进行了这些测试,我想更进一步。我想运行单元测试并找到具有大量逻辑读取的sql,自动。(找到需要调优的sql)
在sql中添加“set statistics IO”并不困难。我正在寻找的是一个存储过程,我发送它的数据库,它返回一个字符串,其中包含有关sql的逻辑读取信息。我在Sybase工作,但如果你知道在不同的数据库中执行此操作的存储proc / etc,那将仍然是一个巨大的帮助。
谢谢!
答案 0 :(得分:1)
这对于TSQL过程是不可能的,但是可以通过订阅SqlConnection对象上的InfoMessage
事件来在.net中捕获输出。
...
using (var connection = new SqlConnection("connectionstring")
using (var command = new SqlCommand("SET STATISTICS IO ON"))
{
connection.Open();
connection.InfoMessage += OnInfoMessage;
using (var reader = command.ExecuteReader())
{
....
}
}
...
private static void OnInfoMessage(object sender, SqlInfoMessageEventArgs args)
{
foreach (SqlError err in args.Errors)
{
Console.WriteLine(err.Message);
}
}