我遇到了一个问题,我有一个表可以被很多线程编辑,每个线程创建一个事务来处理这个表,如果一个事务需要很长时间才能完成,其他线程会抛出异常“查询超时已过期“。我想在交易的某处有超时设置。
我可以使用线程锁来处理这个问题;但是,有没有办法在服务器端执行此操作?我可以在SQL Server中创建一个锁吗?任何帮助将不胜感激。
答案 0 :(得分:1)
您收到的超时不是“交易”超时。这是一般查询超时。此查询可以是选择,更新,删除等。超时值通常在连接字符串中控制。
我不相信你可以专门锁定SQL Server中的行,页面或表,这可能是一件好事。坦率地说,这不是问题的症结所在。您的交易执行时间过长。它们永远不应该花费很长时间来导致其他查询超时(可能至少30秒)。您将使用这么长时间的交易使您的服务器陷入困境。交易最多应保持几秒钟。
我建议您首先查看需要事务的语句(更新,删除或插入),通过SSMS中的查询分析器运行它们,并确保没有进行表或索引扫描。我的猜测是这种情况正在发生,并且交易中涉及的表格偏大(数十万行或更多)。