课程名称:探秘MySQL 多版本并发控制原理
课程章节:【登高望远】经验总结
讲师:普贤
课程内容
Propagation : key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。
有以下选项可供使用:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
Spring中,方法嵌套调用外层读取数据和内存读取数据效果与数据库隔离级别的关系。
可重复度是MySQL默认的隔离级别,但不一定是常用的。乐观锁必不可少。
死锁、逻辑怪圈、并发场景。
如何查看SQL语句是否走了索引(explain)?上图所示
联合索引最左原则
区分度低的字段不适合建索引
联合索引字段个数不宜太多,充分权衡插入删除操作及DBA操作表成本
索引组合索引、少用单列索引
where, on, group by, order by 后面跟着字段创建索引
创建了索引,不代表就走了索引
binLog是MySQL数据库级别的日志 - 类似于数据库的大管家,所有的操作信息都在binLog中记录
undoLog和redoLog是MySQL InnoDB事务引擎下面的日志
undoLog和redoLog是用来保证事务机制的
用来记录事务操作之前的数据和事务操作之后的数据
高并发数据库读写压力大怎么处理?
硬件层
构建DB服务器集群
构建缓存服务器集群
软件层
根据数据热点不同进行分库、分表
构建合理索引
读写分离
课程收获
应对高并发事务, MVCC比单纯的加锁更高效
MVCC只在 读已提交 和 可重复读 两个隔离级别下工作
读已提交隔离级别下,会在每次快照读(查询)都生成一个Read View,可重复读只在事务开始时生成一个Read View,以后每次查询都用这个Read View,以此实现不同隔离级别。
共同学习,写下你的评论
评论加载中...
作者其他优质文章