目前我正在努力学习更多的数据库,现在我在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秒?
谁能回答我的困惑?
原来是我对锁时间的理解是错误的。运行时间超过锁定时间的事务是可能的,因为锁定超时将杀死等待时间超过此参数规定时间的事务,而不是持有锁的事务。