如何创建慢视图?
Posted
技术标签:
【中文标题】如何创建慢视图?【英文标题】:How to create a slow view? 【发布时间】:2020-09-23 08:36:18 【问题描述】:我想测试我的 MS-Access 应用程序(使用链接表)的超时行为。进行慢速数据库查询会非常方便。如果可能,即使有预定义的查询持续时间。
我试过这个:
CREATE VIEW slow_view AS
WAITFOR DELAY '00:01:05'
SELECT 1 AS one
但WAITFOR
不允许在 tsql 视图定义中。
如何在 SQL Server 中创建导致超时的慢速数据库视图?
【问题讨论】:
VIEW
只是一个由SELECT
定义的虚拟表。它不能有像WAITFOR
这样的命令,它实际上可以有一个导致SELECT
的语句。这听起来像是XY Problem,但如果您必须这样做,请使用不同的对象类型,例如存储过程。
@Larnu MS-Access 链接表只能是表或视图。存储过程是不可能的。
【参考方案1】:
一种选择是锁定一张桌子。 在 SSMS 或其他工具中,使用开始事务执行查询,但不包括提交或回滚。
BEGIN TRAN
SELECT *
FROM MyTable with(tablockx)
然后尝试从不同的会话访问同一张表,它会一直等到事务完成/回滚。
在 SSMS 中,左侧是锁定查询,右侧是阻塞查询。
要停止阻塞查询,您可以在锁定查询会话中执行COMMIT
,方法是选择COMMIT
并执行它F5。
【讨论】:
超级方便,因为我可以手动定义,什么时候要查询返回。或者,可以在选择后放置一个WAITFOR DELAY '00:01:05' ROLLBACK
,持续一段预定义的持续时间。
回滚大多是单线程的,所以最好提交。对于此语句,这无关紧要,因为事务日志保持不变,但供将来参考。以上是关于如何创建慢视图?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 视图查询慢,如何优化?请不要复制粘贴谢谢