MySQL MVCC(InnoDB)

灭绝

问题是关于MySQL InnoDB表中同时进行SELECT和UPDATE的行为:

我们有一个相对较大的表,我们定期对其进行扫描以读取多个字段,其中包括一个名为的字段LastUpdate在扫描过程中,我们更新以前扫描的行。使用不同的连接,批处理更新并在后台线程中执行。重要的是要注意,我们将更新已读取的

三个问题:

  1. 由于SELECT仍在进行中,InnoDB是否会保存更新行的先前版本?
  2. 是否将READ-UNCOMMITTED用于SELECT帮助?
  3. 如何确认InnoDB在其重做日志中保存或不保存已修改行的先前版本。
里克·詹姆斯

忽略该问题,并编写不会遇到麻烦的代码:

BEGIN;
SELECT id ... LIMIT 20; -- get list of _possible_ candidates for action
COMMIT;
**
foreach $candidate
    BEGIN;
    SELECT ..., is_candidate WHERE id = $candidate FOR UPDATE;
    if still a candidate
        process it
        UPDATE ...;
    COMMIT;

如果有人滑入,例如在**,则稍后进行检查将防止重复处理。此外,第二个BEGIN..COMMIT可以防止任何人滑入。

FOR UPDATE“锁定”行;这个很重要。

以这种方式进行处理的优点是交易速度很快,从而将对其他所有事务的影响降到最低。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一个关于mysql innodb mvcc的测试

来自分类Dev

InnoDB的MySQL死锁问题

来自分类Dev

MySQL查询性能(InnoDB)

来自分类Dev

MySQL的InnoDB插入失败

来自分类Dev

MySQL InnoDB 并发更新

来自分类Dev

XAMPP MySQL InnoDB 错误

来自分类Dev

MySQL InnoDB插入并选择锁定

来自分类Dev

MySQL Innodb“表已满”错误

来自分类Dev

MySQL UPDATE operations on InnoDB occasionally timeout

来自分类Dev

MySQL / InnoDB和长期运行的查询

来自分类Dev

MySQL Innodb死锁-如何删除旧事件?

来自分类Dev

有许多列的MySQL InnoDB主键

来自分类Dev

mysql-从InnoDB删除行非常慢

来自分类Dev

如何为MySQL InnoDB配置Memcached?

来自分类Dev

MySQL启动时出现InnoDB错误

来自分类Dev

MySQL更改innodb_large_prefix

来自分类Dev

mysql InnoDB:FOREIGN KEY约束性能

来自分类Dev

Spring Boot-MySQL默认使用InnoDB

来自分类Dev

聊天表的mysql引擎(堆/内存与innodb)

来自分类Dev

MySQL InnoDB丢失表但文件存在

来自分类Dev

MySQL无法启动-找不到innodb

来自分类Dev

mysql-从InnoDB删除行非常慢

来自分类Dev

MySQL InnoDB直接从索引中选择数据

来自分类Dev

找出什么锁定了MySQL InnoDB表行

来自分类Dev

如何为MySQL InnoDB配置Memcached?

来自分类Dev

MySQL InnoDB日志文件存储在哪里?

来自分类Dev

MySQL InnoDB慢-按情况排序

来自分类Dev

相关产品的方法建议,MySQL InnoDB / PHP

来自分类Dev

InnoDB中的MySQL全文搜索错误