事务运行时间超过锁定超时
Posted
技术标签:
【中文标题】事务运行时间超过锁定超时【英文标题】:transaction ran longer than lock timeout 【发布时间】:2015-08-16 11:21:27 【问题描述】:目前我正在尝试了解有关数据库的更多信息, 现在我在 DB2 上,锁定超时设置为 30 秒 为了测试它,我同时运行了数千个事务来对服务器进行压力测试,并记录每个存储过程 (SP) 调用所花费的时间。计时器在 SP 中的声明行之后开始,并且在它结束之前记录的结束时间。而且我发现交易花费的时间远远超过 30 秒(有时甚至接近 70 秒)。是不是我做错了什么(我只在 db cfg 中设置了 LOCKTIMEOUT 参数)还是原来的样子?
begin
//record the start time
//the actuan transaction
//record end time, and return the time as result sets
end
如果说线程 1,2,3 同时进入,线程 1 持有锁 29 秒,线程 2 持有锁 29 秒,线程 3 会因为等待太久而被杀死吗?如果它没有在 10 秒内被杀死并完成任务,那么事务时间是 68 秒还是只有 10 秒?
谁能回答我的困惑?
【问题讨论】:
平台和版本? 我使用在 CentOS 6.5 上运行的 DB2 10.5 ESE 这将取决于您的报表以及您使用的交易设置。如果您更新整个表,则会因此锁定其他所有内容。如果您通过主键搜索只更新一行,您很可能只锁定一行,并且来自其他事务的更新将交错。请注意,与大多数应用程序语言不同,事务块不会阻止其他线程运行该部分过程,它只是使某些数据保持同步。 【参考方案1】:原来是我对锁定时间的理解是错误的。 运行时间超过锁定时间的事务是可能的,因为锁定超时将杀死等待时间超过此参数时间的事务,而不是持有锁定的事务。
【讨论】:
以上是关于事务运行时间超过锁定超时的主要内容,如果未能解决你的问题,请参考以下文章
“错误代码:1205。超过锁定等待超时;尝试重新启动事务”删除事件
保存/更新模型时,Django“超过锁定等待超时;尝试重新启动事务”