大家企业实际生产中数据库都如何配置?
資深大佬 : RedBlackTree 2
是否 autocommit,隔离级别是 Read Uncommit 还是 Repeatable Read ?
上次去面试人家问我,说隔离级别,我就说了自己理解的 RR,select 过程加读锁,其他事务没法加写锁,避免其他事务修改我们 select 的记录。对面就笑了:单单 select 就会加锁吗?你确定?我说理论上是这样的,实际中 Innodb 通过 MVCC 来避免加锁。
然后就是一段时间的争执,对方认为 select 不会加锁,我也就重复自己的观点。
然后对方问我之前公司用的隔离级别是什么,我说默认的 RR 。问到幻读,说你们是怎么解决幻读的。我就卡壳了,没遇到过啊,Innodb 不是不会幻读吗。最后驴唇不对马嘴地扯了半天,说可以借鉴 MVCC 自己添加版本字段,各个事务只操作自己版本的记录。最后才明白对方想得到 select for update 的答案。
后来又翻了技术内幕那本书,才发现 innodb 在 RR 级别下才会用 Next-key lock 解决幻读,而 RC 级别下只有行锁,所以会有幻读。
自己确实缺少实操经验,所以想问问大家实际生产环境中数据库怎么设置的。
上次去面试人家问我,说隔离级别,我就说了自己理解的 RR,select 过程加读锁,其他事务没法加写锁,避免其他事务修改我们 select 的记录。对面就笑了:单单 select 就会加锁吗?你确定?我说理论上是这样的,实际中 Innodb 通过 MVCC 来避免加锁。
然后就是一段时间的争执,对方认为 select 不会加锁,我也就重复自己的观点。
然后对方问我之前公司用的隔离级别是什么,我说默认的 RR 。问到幻读,说你们是怎么解决幻读的。我就卡壳了,没遇到过啊,Innodb 不是不会幻读吗。最后驴唇不对马嘴地扯了半天,说可以借鉴 MVCC 自己添加版本字段,各个事务只操作自己版本的记录。最后才明白对方想得到 select for update 的答案。
后来又翻了技术内幕那本书,才发现 innodb 在 RR 级别下才会用 Next-key lock 解决幻读,而 RC 级别下只有行锁,所以会有幻读。
自己确实缺少实操经验,所以想问问大家实际生产环境中数据库怎么设置的。
大佬有話說 (3)