mysql - 823126028/book_reader GitHub Wiki
mysql 主从复制:
- 主从复制可能有延迟问题,update 主库,立刻select 从库要考虑这种问题。
- 在线上数据量很大的时候,改变数据结构会导致从库不可用(提前分库分表)。
mysql 事务
-
特性: A:原子性, C:一致性,I:隔离性 D:持久性
-
事务的隔离级别:
https://blog.csdn.net/qq_33290787/article/details/51924963
阅读:- read uncommit 导致脏读
- read commit 不可重复读的问题
- read repeatable 有幻读的问题
-
事务的传播行为:
1.PROPAGATION_REQUIRED 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
2.PROPAGATION_SUPPORTS 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。
3.PROPAGATION_MANDATORY 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
4.PROPAGATION_REQUIRES_NEW 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
5.PROPAGATION_NOT_SUPPORTED 总是非事务地执行,并挂起任何存在的事务。
6.PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常。
7.PROPAGATION_NESTED如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。
-
spring transaction 实际是一个切面方式实现的注解方法。
索引
- 建索引的另一个好处,搜索不加索引的行,会出现锁表情况
- https://blog.csdn.net/libo222/article/details/52459644
性能分析操作:
show status like '%innodb row lock%'; wait avg
设置 innodb monitor 看锁竞争
show innodb status 看锁的问题(死锁信息)
对比慢查询数量show slow queries,uptime 开启时间
mysql limit 优化方法。
分页方法: offset 5000, limit 5000的方法。
select id from table where condition limit 5000; 获得上面的last_id。
select id from table where condition and id > last_id limit 5000;