【问题标题】: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
  • 这将取决于您的报表以及您使用的交易设置。如果您更新整个表,则会因此锁定其他所有内容。如果您通过主键搜索只更新一行,您很可能只锁定一行,并且来自其他事务的更新将交错。请注意,与大多数应用程序语言不同,事务块不会阻止其他线程运行该部分过程,它只是使某些数据保持同步。

标签: database db2 locking lock-timeout


【解决方案1】:

原来是我对锁定时间的理解是错误的。 运行时间超过锁定时间的事务是可能的,因为锁定超时将杀死等待时间超过此参数时间的事务,而不是持有锁定的事务。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多