BnW*_*and 76 sql-server testing timeout locking
我们遇到了一个代码块的问题,这个代码块在数据库缓慢的情况下响应很差(它在查询超时时瘫痪).我们已经创建了一个补丁,并且正在通过回归运行它.
我们不能超时.我已经从SQL Mgmt Studio打开了一个事务并更新了每一行来锁定它们,但这并不会导致INSERT超时(这就是我需要的).
我可以通过T-SQL轻松获得表级锁吗?或者我必须在主人身边摆弄?或者我可以轻松强制超时而不锁定?任何输入都表示赞赏.
KM.*_*KM. 127
运行此,然后尝试插入...
select * from yourTable with (holdlock,tablockx)
Run Code Online (Sandbox Code Playgroud)
在这里,你可以锁定它5分钟:
BEGIN TRANSACTION
SELECT * FROM yourTable WITH (TABLOCKX, HOLDLOCK)
WHERE 0 = 1
WAITFOR DELAY '00:05'
ROLLBACK TRANSACTION
Run Code Online (Sandbox Code Playgroud)
Dav*_*vid 29
您可以告诉您的sql代码在返回之前等待一分钟:
WaitFor Delay '00:01:00'
Run Code Online (Sandbox Code Playgroud)
Pre*_*ous 10
在提示方面:如果连接是可配置的,将连接字符串超时减少到1秒 - 这将使其更容易.使用大量数据填充表,并在循环中旋转3个其他进程,并使用循环周围的事务更新该表的块.不要改变应用程序调用的实际过程(注入waitfor).这使集成测试无效.
但实际上,这是一个支持单元测试和依赖注入的案例研究.有些事情很难进行集成测试.单元测试+ 依赖注入.
这是"依赖"注入.开发人员可以将依赖项注入数据库,替换模拟依赖项行为的东西.很适合所有数据库测试.无论如何,在单元测试到位的情况下,您知道修复程序确实应该做什么,但您仍需要进行集成测试.在这种情况下,它可能更好地专注于回归 - 这意味着测试它没有破坏任何其他东西,该功能仍然有效.
你已经创建了你的补丁,所以我想我的答案为时已晚.
看看这篇博文.基本上SQL Server没有查询超时.客户端可以强制执行SQL超时,但引擎本身不会.
http://blogs.msdn.com/khen1234/archive/2005/10/20/483015.aspx
| 归档时间: |
|
| 查看次数: |
45929 次 |
| 最近记录: |