【发布时间】: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