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

2021-01-30 13:10:27 +08:00
 RedBlackTree
是否 autocommit,隔离级别是 Read Uncommit 还是 Repeatable Read ?
上次去面试人家问我,说隔离级别,我就说了自己理解的 RR,select 过程加读锁,其他事务没法加写锁,避免其他事务修改我们 select 的记录。对面就笑了:单单 select 就会加锁吗?你确定?我说理论上是这样的,实际中 Innodb 通过 MVCC 来避免加锁。
然后就是一段时间的争执,对方认为 select 不会加锁,我也就重复自己的观点。
然后对方问我之前公司用的隔离级别是什么,我说默认的 RR 。问到幻读,说你们是怎么解决幻读的。我就卡壳了,没遇到过啊,Innodb 不是不会幻读吗。最后驴唇不对马嘴地扯了半天,说可以借鉴 MVCC 自己添加版本字段,各个事务只操作自己版本的记录。最后才明白对方想得到 select for update 的答案。
后来又翻了技术内幕那本书,才发现 innodb 在 RR 级别下才会用 Next-key lock 解决幻读,而 RC 级别下只有行锁,所以会有幻读。
自己确实缺少实操经验,所以想问问大家实际生产环境中数据库怎么设置的。
1705 次点击
所在节点    数据库
3 条回复
xuanbg
2021-01-30 13:20:35 +08:00
默认配置
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
2021-01-30 14:19:16 +08:00
有一说一还是 nosql 简单。sql 这种就应该在生产服务上淘汰。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/749811

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX