Database 在DB2或任何数据库中是否可以检测表是否被锁定?

Database 在DB2或任何数据库中是否可以检测表是否被锁定?,database,select,locking,db2,Database,Select,Locking,Db2,在DB2中是否可以检测表是否被锁定。实际上,每当我们使用Select语句时,如果该表被锁定(可能是因为正在执行插入或删除),那么我们必须等到该表被解锁 在我们的应用程序中,有时甚至需要2-3分钟。我的想法是,如果我能有某种机制来检测被锁定的表,那么我甚至不会尝试获取记录,而是会发出一些消息 不仅在DB2中,而且在任何数据库中都可以检测到这一点。我从未使用过DB2,但根据示例,似乎可以使用以下方法使查询不等待锁定: SET CURRENT LOCK TIMEOUT NOT WAIT 或者,可以将

在DB2中是否可以检测表是否被锁定。实际上,每当我们使用Select语句时,如果该表被锁定(可能是因为正在执行插入或删除),那么我们必须等到该表被解锁

在我们的应用程序中,有时甚至需要2-3分钟。我的想法是,如果我能有某种机制来检测被锁定的表,那么我甚至不会尝试获取记录,而是会发出一些消息


不仅在DB2中,而且在任何数据库中都可以检测到这一点。

我从未使用过DB2,但根据示例,似乎可以使用以下方法使查询不等待锁定:

SET CURRENT LOCK TIMEOUT NOT WAIT
或者,可以将锁定超时值设置为0

SET CURRENT LOCK TIMEOUT 0
这两种说法具有相同的效力


一旦有了DB2,您就可以尝试从表中进行选择并捕获错误。

我从未使用过DB2,但根据示例,您似乎可以使用以下方法使查询不等待锁定:

SET CURRENT LOCK TIMEOUT NOT WAIT
或者,可以将锁定超时值设置为0

SET CURRENT LOCK TIMEOUT 0
这两种说法具有相同的效力


一旦您有了这个,您可以尝试从表中选择并捕获错误。

我建议不要等待,而是指定一个低锁定超时(10-30s)。如果目标表只是暂时锁定(小更新,比如1秒),您的第二个应用程序将立即超时。如果您有10秒的超时时间,第二个应用程序只需等待第一个应用程序提交或回滚(1秒),然后向前移动

也考虑到有一个“先到先得”的政策,当你发锁时——如果第二个应用程序“放弃”,第三个应用程序可以进入并抓住第二个程序所需要的锁。第二个应用程序可能会因为不断放弃而经历锁饥饿

如果您正在经历并发性问题,请考虑锁定监视,以获取如何访问数据库的句柄。有很多有用的统计信息(如平均锁等待时间等)可以帮助您调整参数和应用程序行为


我建议不要等待,而是指定一个低锁定超时(10-30秒)。如果目标表只是暂时锁定(小更新,比如1秒),您的第二个应用程序将立即超时。如果您有10秒的超时时间,第二个应用程序只需等待第一个应用程序提交或回滚(1秒),然后向前移动

也考虑到有一个“先到先得”的政策,当你发锁时——如果第二个应用程序“放弃”,第三个应用程序可以进入并抓住第二个程序所需要的锁。第二个应用程序可能会因为不断放弃而经历锁饥饿

如果您正在经历并发性问题,请考虑锁定监视,以获取如何访问数据库的句柄。有很多有用的统计信息(如平均锁等待时间等)可以帮助您调整参数和应用程序行为


哇。。我想给你+5分:D.Wow。。我想给你+5分:D。