如何减慢SQL Server VIEW的速度?

时间:2017-12-14 23:43:18

标签: sql sql-server sql-server-2012

是否可以在SQL Server视图中使用WAITFOR

我有一个视图被一些应用程序引用,我需要在视图中引入一些缓慢的做一些应用程序测试(以测试它们处理它的程度)。

不幸的是,我找不到编辑此视图并使其运行缓慢的方法。

3 个答案:

答案 0 :(得分:4)

你无法让SQL视图有延迟。这样做甚至没有意义。

如果你真的想引入一些等待时间,理论上你可以构建一个休眠的存储过程,然后返回你的查询结果。

或者,您可以将慢速介绍到您的应用程序逻辑中(这更有意义)。

答案 1 :(得分:2)

VIEW不是程序 - 实际上SQL DML语句本身不是程序:它们不代表一系列指令。相反,它们是relational-algebr a的代表,因此延迟它们的想法毫无意义。

我注意到VIEW最终总是由SELECT语句引用。您可以在PROCEDURE或非内联FUNCTION内添加围绕的延迟,但正如其他人所说,您不能在行之间添加延迟在SQL Server结果集中。

  

我有一个视图被一些应用程序引用,我需要在视图中引入一些缓慢的做一些应用程序测试(以测试它们处理它的程度)。

我认为更好的测试方法是使用实际测试工具,例如模拟,存根或伪造系统。

假设您正在进行定位的.NET系统,您可以将SqlDataReader的{​​{1}}子类化为await Task.Delay(100)

如果您无法修改应用程序的源代码,则可以使用网络速度限制器人为地将计算机的网络速度降低到每小时千字节以下第二

另一种方法可能是为Wireshark编写一个自定义脚本,用于检测和解析TDS(表数据流,SQL Server的有线协议)并将其代理为新服务器,同时插入自己的延迟。这可能是长期解决方案的最佳方法,因为它非常适合其他项目 - 您或您的公司可以将其作为数据库延迟测试工具出售,并从中获得很好的收益。

最后,您可以从virtual MoveNextAsync切换到在VIEW指令之间有CURSOR步的WAITFOR DELAY - 但这可能需要广泛更改应用程序源代码而且,由于无状态组件(内联函数,视图和FETCH)生成的查询总是具有更好的运行时执行计划和可证明的正确性,因此获得的收益微乎其微。 (游标是xBase风格数据库的遗留物 - 避免使用它们,只有在查询无法表示为SELECT时才使用它们。)

答案 2 :(得分:1)

不,这是不可能的。 您可以使用存储过程来实现此功能。