V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
byerer
V2EX  ›  MySQL

什么时候可以将 mysql 默认隔离机制改为读已提交

  •  
  •   byerer · 1 天前 · 1805 次点击

    新业务需要在事务中使用乐观锁,在 RR 下需要回滚重试整个事务,而 rc 只需要重试某一个更新,有必要改成 rc 吗,如何判断业务在满足什么条件下可以不依赖 rr ,是不是只要不依赖可重复读就行

    9 条回复    2025-07-08 16:32:14 +08:00
    leopod1995
        1
    leopod1995  
       1 天前
    RR 场景相当于在一个 transaction 中可以对一条读 sql 多次调用返回一致的结果,原理就是在一个 transaction 中生成了 snapshot 。一般不用 RC 的原因就是在一个事务中会重复调用同一条 sql 。

    如果能保证一个 transaction 中没有重复 sql 的情况下,是可以替换的。
    cubecube
        2
    cubecube  
       1 天前
    @leopod1995 根本不需要保证,随时都能改,oracle 默认是 rc ,用 oracle 的系统都好好的不是。rr 纯粹为了刷存在感。
    Dorathea
        3
    Dorathea  
       1 天前
    你都用乐观锁了, 那 RC 会比 RR 更合适吧, 毕竟你都觉得数据大概率不会冲突了
    Georgedoe
        5
    Georgedoe  
       1 天前
    性能有瓶颈的时候吧 , 没瓶颈改了也没啥收益
    857681664
        6
    857681664  
       1 天前
    如果业务在一个事务中允许一个读出来的数据被其他事务更改,且不影响正常业务的逻辑就行。话说如果只是乐观锁,完全可以不用考虑 rr 还是 rc ,直接用 update 语句判断执行结果是不是更好。
    iseki
        7
    iseki  
       1 天前
    你不在乎多个请求查出的数据之间存在不一致的时候
    iPisces77
        8
    iPisces77  
       9 小时 12 分钟前
    mysql 整体就是给 RR 设计的,其他数据库都是 RC,所以你改了也没啥影响
    byerer
        9
    byerer  
    OP
       4 小时 1 分钟前
    @857681664 rr 情况下,在一个事务中,重试乐观锁的时候读不到最新数据呀,得先回滚事务
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:33 · PVG 20:33 · LAX 05:33 · JFK 08:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.