我们对数据访问层进行了单元测试。这有助于发现 sql 语法错误。
现在我们有了这些测试,我想更进一步。我想运行单元测试并自动查找具有大量逻辑读取的sql。(查找需要调整的sql)
在 sql 中添加“set statistics IO”并不难。我正在寻找的是一个存储过程,我将它发送到 db 并返回一个包含有关 sql 的逻辑读取信息的字符串。我在 Sybase 工作,但如果您知道存储的 proc/etc 在不同的数据库中执行此操作,那仍然会有很大的帮助。
谢谢!
我们对数据访问层进行了单元测试。这有助于发现 sql 语法错误。
现在我们有了这些测试,我想更进一步。我想运行单元测试并自动查找具有大量逻辑读取的sql。(查找需要调整的sql)
在 sql 中添加“set statistics IO”并不难。我正在寻找的是一个存储过程,我将它发送到 db 并返回一个包含有关 sql 的逻辑读取信息的字符串。我在 Sybase 工作,但如果您知道存储的 proc/etc 在不同的数据库中执行此操作,那仍然会有很大的帮助。
谢谢!
这对于 TSQL 过程是不可能的,但可以通过订阅InfoMessage
SqlConnection 对象上的事件在 .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);
}
}