免费注册域名的网站,源码分享,中国城镇建设网站,html网站建设流程MySql事务原理与优化建议 前言一、事务的定义二、事务的ACID特性三、事务的隔离性四、读写锁五、MVCC机制六、事务提交的流程七、大事务的影响八、事务优化建议总结 前言
最新的 Java 面试题#xff0c;技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、My… MySql事务原理与优化建议 前言一、事务的定义二、事务的ACID特性三、事务的隔离性四、读写锁五、MVCC机制六、事务提交的流程七、大事务的影响八、事务优化建议总结 前言
最新的 Java 面试题技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等会持续更新。
如果对老铁有帮助帮忙免费点个赞谢谢你的发财手
一、事务的定义
事务就是一组操作要么全部成功要么全部失败回滚目的就是为了保证数据的一致性。
二、事务的ACID特性
1、原子性Atomicity当前事务的操作要么全部成功要么全部同时失败。 它是由undo log日志来实现。 2、一致性Consistency事务前后的数据是一致的。 它是由其他三个特性来保证的。 3、隔离性Isolation事务之间互相不影响。 它是由mysql的各种锁以及MCCC机制来实现的。 4、永久性Durability事务一旦提交成功对数据的修改就是永久性的。 它是由redo log 来实现的。
三、事务的隔离性
在mysql中的InnoDB引擎中定义了四种隔离级别隔离级别越高性能越差。 1、read uncommit读未提交会产生脏读2、read commit读已提交不可重复读3、repeatable read可重复读会产生幻读4、serializable串行读性能最差
四、读写锁
读锁共享锁、S锁select …lock in share mode; 读锁是共享的多个事务可以同时读取同一个资源但不允许其他事务修改。 写锁独占锁、X锁select …for update; 写锁是排他的会阻塞其他的写锁或读锁insert 、delete、update都会加写锁。 五、MVCC机制
MVCCmulti-version Concurrency Control多版本并发控制可以做到读写不阻塞避免了类似脏读这样的问题主要通过undo日志链来实现。 select操作是快照读历史版本insert、delete和update是当前读当前版本read commit读已提交语句级快照repeatable rea可重复读事务级快照
六、事务提交的流程
1、client执行一条SQL会经过连接器管理连接和权限校验分析器词法语法分析优化器执行计划生成索引选择执行器调用引擎接口2、从磁盘中加载复合条件的数据到内存中Buffer pool数据库的增删改查都是直接操作Buffer pool的3、写入更新数据的旧值到undo log中如果事务失败回滚需要用到undo log日志里的数据恢复Buffer pool里的缓存数据4、更新Buffer pool里的数据同时记录redo log日志顺序写入到磁盘此时还是处于prepare状态5、准备提交事务记录bin log 日志写入到磁盘主要是用来恢复数据库磁盘的数据6、提交事务同时把redo log日志的标记改为commit状态7、操作系统会把Buffer pool中的数据以page为单位写入到磁盘中。 如果事务提交成功Buffer pool里的数据还没来得及写入到磁盘系统宕机了可以用redo log日志里的数据来恢复磁盘ibd文件里的数据。
七、大事务的影响
并发情况下数据库连接池容易撑爆锁定太多的数据造成大量的阻塞和锁超时执行时间长容易造成主从延迟回滚所需要的时间比较长容易导致死锁。
八、事务优化建议
将查询等数据准备操作放到事务外事务中避免远程调用远程调用要设置超时防止事务等待时间过久事务中避免一次性处理太多的数据可以拆分成多个事务分次处理封信等设计加锁的操作尽可能放在事务靠后的为准能异步处理的尽量异步处理。
总结
都已经看到这里啦赶紧收藏起来祝您工作顺心生活愉快