V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RedBlackTree
V2EX  ›  数据库

大家企业实际生产中数据库都如何配置?

  •  
  •   RedBlackTree · 2021-01-30 13:10:27 +08:00 · 1675 次点击
    这是一个创建于 1387 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是否 autocommit,隔离级别是 Read Uncommit 还是 Repeatable Read ?
    上次去面试人家问我,说隔离级别,我就说了自己理解的 RR,select 过程加读锁,其他事务没法加写锁,避免其他事务修改我们 select 的记录。对面就笑了:单单 select 就会加锁吗?你确定?我说理论上是这样的,实际中 Innodb 通过 MVCC 来避免加锁。
    然后就是一段时间的争执,对方认为 select 不会加锁,我也就重复自己的观点。
    然后对方问我之前公司用的隔离级别是什么,我说默认的 RR 。问到幻读,说你们是怎么解决幻读的。我就卡壳了,没遇到过啊,Innodb 不是不会幻读吗。最后驴唇不对马嘴地扯了半天,说可以借鉴 MVCC 自己添加版本字段,各个事务只操作自己版本的记录。最后才明白对方想得到 select for update 的答案。
    后来又翻了技术内幕那本书,才发现 innodb 在 RR 级别下才会用 Next-key lock 解决幻读,而 RC 级别下只有行锁,所以会有幻读。
    自己确实缺少实操经验,所以想问问大家实际生产环境中数据库怎么设置的。
    3 条回复    2021-01-30 14:19:16 +08:00
    xuanbg
        1
    xuanbg  
       2021-01-30 13:20:35 +08:00
    默认配置
    louettagfh
        2
    louettagfh  
       2021-01-30 14:07:28 +08:00
    1. select 是否加锁要看是什么类型的 select 语句:
    * 快照读不需要加锁, MVCC 的 undo log 能保证读到正确的数据.
    * shard mode 加 s 锁.
    * for update 加 x 锁.

    2. InnoDB 使用 Next-key Lock 解决了 RR 部分场景下的幻读,也不是完全的避免幻读.
    yzbythesea
        3
    yzbythesea  
       2021-01-30 14:19:16 +08:00
    有一说一还是 nosql 简单。sql 这种就应该在生产服务上淘汰。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2616 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 05:36 · PVG 13:36 · LAX 21:36 · JFK 00:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.