【问题标题】:Is it possible in DB2 or in any Database to detect if the table is locked or not?是否可以在 DB2 或任何数据库中检测表是否被锁定?
【发布时间】:2010-12-04 04:34:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: database select locking db2


    【解决方案1】:

    我从未使用过 DB2,但根据documentation 看来,您可以使用以下方法进行查询而不等待锁定:

    SET CURRENT LOCK TIMEOUT NOT WAIT
    

    或者,您可以将锁定超时值设置为 0

    SET CURRENT LOCK TIMEOUT 0
    

    这两个语句的效果是一样的。

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

    【讨论】:

    • 哇..我想给你+5这个:D.
    【解决方案2】:

    我建议不要使用 NO WAIT,而是指定较低的 LOCK TIMEOUT(10-30 秒)。如果目标表只是暂时锁定(小更新,比如 1 秒),您的第二个应用程序将立即超时。如果您有 10 秒的超时,第二个应用程序将简单地等待第一个应用程序提交或回滚(1 秒)然后继续前进。

    还要考虑在分配锁时有一点“先到先得”的政策 - 如果第二个应用“放弃”,第三个应用可以进入并获取第二个应用所需的锁。第二个应用程序可能会因为不断放弃而经历锁饥饿。

    如果您遇到持续的并发问题,请考虑使用锁定监控来了解数据库的访问方式。有许多有用的统计数据(例如平均锁定等待时间等)可以帮助您调整参数和应用程序行为。

    DB2 V9.7 Infocenter - Database Monitoring

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 2018-01-21
      • 2019-02-17
      相关资源
      最近更新 更多