0

我遇到了一个问题,我有一个可以由多个线程编辑的表,每个线程创建一个事务来处理这个表,如果一个事务需要很长时间才能完成,其他线程将抛出异常“查询超时过期” . 我猜交易的某处有超时设置。

我可以使用线程锁来处理这个问题;但是,有没有办法在服务器端做到这一点?我可以在 SQL Server 中创建锁吗?任何帮助将不胜感激。

4

1 回答 1

1

您收到的超时不是“事务”超时。这是一般查询超时。此查询可以是 Select、Update、Delete 等。超时值通常在连接字符串中控制。

我不相信您可以专门锁定 SQL Server 中的行、页或表,这可能是件好事。坦率地说,这不是问题的症结所在。您的交易执行时间过长。它们不应该花费太长时间导致其他查询超时(可能至少 30 秒)。由于交易需要这么长时间,您将让您的服务器陷入瘫痪。一笔交易最多应该保持几秒钟。

我建议您首先查看需要事务的语句(更新、删除或插入),通过 SSMS 中的查询分析器运行它们,并确保没有进行表或索引扫描。我的猜测是这种情况正在发生,并且事务中涉及的表偏大(数十万行或更多)。

于 2012-12-19T17:24:22.850 回答