MySQL 8.x 隔离级别调整
MySQL 8.x 隔离级别调整1. 如何查看隔离级别方式一使用全局函数推荐兼容各版本方式二使用 SHOW VARIABLES2. MySQL 默认隔离级别是什么3. 如何修改隔离级别为 RC (Read Committed)方案 A仅修改当前会话立即生效断开重连后恢复默认方案 B全局修改对后续新连接生效重启 MySQL 后失效方案 C永久修改修改配置文件重启生效⚠️ 切换到 RC 后的核心变化在 MySQL 中事务隔离级别决定了多个事务并发执行时相互影响的程度。更多详情可参考《MySQL 数据库 隔离级别 详解》。事务隔离级别决定了在并发访问下一个事务可以看到其他事务的哪些数据变化。MySQL 支持标准 SQL 的四种隔离级别隔离级别描述可能发生的问题READ UNCOMMITTED读未提交可以读取其他事务未提交的数据脏读READ COMMITTED读已提交只能读取其他事务已提交的数据不可重复读REPEATABLE READ可重复读事务内多次读取同一数据结果相同幻读InnoDB 会用 Next-Key Lock 避免幻读SERIALIZABLE可串行化最严格事务串行执行性能开销大1. 如何查看隔离级别由于 MySQL 不同版本的变量名略有差异5.7 之前使用tx_isolation8.0 之后使用transaction_isolation建议使用通用查询方式方式一使用全局函数推荐兼容各版本-- 查看当前会话的隔离级别SELECTtransaction_isolation;-- 查看全局系统的隔离级别SELECTglobal.transaction_isolation;方式二使用SHOW VARIABLES-- 模糊匹配查询SHOWVARIABLESLIKEtransaction_isolation;-- 或者旧版本5.7以下使用SHOWVARIABLESLIKEtx_isolation;2. MySQL 默认隔离级别是什么MySQL 的默认隔离级别是可重复读 (Repeatable Read, RR)。特点在同一个事务内多次读取同一补偿数据的结果是一致的。与其他数据库的区别像 Oracle 和 SQL Server 的默认隔离级别通常是读已提交 (Read Committed, RC)。额外增强MySQL 的 RR 级别通过Next-Key Locks间隙锁行锁在很大程度上解决了“幻读”问题。3. 如何修改隔离级别为 RC (Read Committed)可以根据影响范围选择以下三种修改方式之一方案 A仅修改当前会话立即生效断开重连后恢复默认如果只想让当前的连接窗口变成 RC 级别执行SETSESSIONTRANSACTIONISOLATIONLEVELREADCOMMITTED;方案 B全局修改对后续新连接生效重启 MySQL 后失效如果希望整个数据库实例都切换到 RC但不想重启服务SETGLOBALTRANSACTIONISOLATIONLEVELREADCOMMITTED;注意已连接的会话不会改变只有新创建的连接才会生效。方案 C永久修改修改配置文件重启生效如果希望永久生效需要修改 MySQL 的配置文件Linux 下通常是my.cnfWindows 下是my.ini找到[mysqld]配置节。添加或修改如下行[mysqld] transaction-isolation READ-COMMITTED重启 MySQL 服务。⚠️ 切换到 RC 后的核心变化从 RR 切换到 RC数据库行为会发生以下显著变化不再防止不可重复读同一个事务内两次执行同一条SELECT可能得到不同结果如果期间有其他事务提交了修改。性能提升RC 级别下锁的粒度更小间隙锁 (Gap Lock)基本失效这能减少死锁的概率并提高并发能力。Binlog 格式要求在 RC 级别下建议将binlog_format设置为ROW行级格式否则在主从复制时可能会出现数据不一致。若有转载请标明出处https://blog.csdn.net/CharlesYuangc/article/details/160532549
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2557573.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!