我们遇到了一个代码块在面对慢速数据库时响应不佳的问题(它在查询超时时间上喋喋不休)。我们已经创建了一个补丁,并且正在通过回归运行它。在SQL Server中强制查询超时
我们不能超时。我已经从SQL Mgmt Studio中打开了一个事务并更新了每一行来锁定它们,但是这不会导致INSERT超时(这是我需要的)。
我可以通过T-SQL轻松获得表级锁吗?或者我必须在主人身边摆弄?或者我可以轻松地强制超时而不锁定?任何输入赞赏。
我们遇到了一个代码块在面对慢速数据库时响应不佳的问题(它在查询超时时间上喋喋不休)。我们已经创建了一个补丁,并且正在通过回归运行它。在SQL Server中强制查询超时
我们不能超时。我已经从SQL Mgmt Studio中打开了一个事务并更新了每一行来锁定它们,但是这不会导致INSERT超时(这是我需要的)。
我可以通过T-SQL轻松获得表级锁吗?或者我必须在主人身边摆弄?或者我可以轻松地强制超时而不锁定?任何输入赞赏。
来看,这种再试试你的INSERT ...
select * from yourTable with (holdlock,tablockx)
在这里,你可以将其锁定为5分钟:
BEGIN TRANSACTION
SELECT * FROM yourTable WITH (TABLOCKX, HOLDLOCK)
WHERE 0 = 1
WAITFOR DELAY '00:05'
ROLLBACK TRANSACTION
你可以告诉你的SQL代码等待一分钟在返回之前:
WaitFor Delay '00:01:00'
看看这篇博文。基本上SQL Server没有查询超时。客户端可能会执行SQL超时,但引擎本身不会。
http://blogs.msdn.com/khen1234/archive/2005/10/20/483015.aspx
在前端侧:如果连接配置,连接字符串超时减少到1秒 - 这将使它更容易。用大量数据填充表格,并让其他3个进程在一个循环中旋转,用循环中的事务更新该表格的块。不要改变应用程序调用的实际过程(注入waitfor)。这使集成测试无效。
但实际上,这是一个有利于单元测试和依赖注入的案例研究。有些事情很难整合测试。单元测试+ dependency injection。
这是“依赖性”注射。开发人员可以将依赖关系注入数据库,替换模拟依赖关系行为的东西。所有数据库测试都很好。无论如何,随着单元测试的到位,您知道修补程序确实应该做些什么,但您仍然需要进行集成测试。在这种情况下,它可能更好地关注回归 - 这意味着测试它不会破坏其他任何内容,并且该功能仍然有效。
你已经创建了你的补丁,所以我想我的答案为时已晚。
投票回答简单。我已经测试过它,它的工作原理 – Mikel 2017-08-08 12:51:08