【问题标题】:InnoDB: Update a lock timeout on table and select the result efficientlyInnoDB:更新表上的锁定超时并有效地选择结果
【发布时间】:2011-12-19 19:54:24
【问题描述】:

我有一个带有锁定超时列的 InnoDB 表。如果此列为空,则没有锁,否则根据该列中的时间戳,存在一个超时锁。

我遇到的问题是该表中有很多行,并且该表中的许多行每分钟都会被处理,但处理当前遵循此模型:

1. select rows to be processed
2. iterate over rows to be processed in Java
     a. Try to acquire a lock on row
     b. if lock acquired, process row and continue; else continue

这很快就会变得低效,所以如果我可以尝试在要处理的所有行上获取锁,然后返回结果集是在一个事务或几个更有效的事务中获得锁的所有行。

你会推荐什么?

【问题讨论】:

    标签: java mysql sql innodb


    【解决方案1】:

    只选择可以获取锁的行,在你的 sql 中使用 where 子句,比如

    where lock_timeout is null
    

    另外,如果它有多个线程,我希望你在这整个代码段上放置一个互斥锁或其他东西。从选择行到锁定的所有内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多