mysql - 823126028/book_reader GitHub Wiki

mysql 主从复制:

  • 主从复制可能有延迟问题,update 主库,立刻select 从库要考虑这种问题。
  • 在线上数据量很大的时候,改变数据结构会导致从库不可用(提前分库分表)。

mysql 事务


  • 特性: A:原子性, C:一致性,I:隔离性 D:持久性

  • 事务的隔离级别:

    阅读:https://blog.csdn.net/qq_33290787/article/details/51924963

    1. read uncommit 导致脏读
    2. read commit 不可重复读的问题
    3. 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 实际是一个切面方式实现的注解方法。

索引

性能分析操作:

 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;

replace into insert into (如果有唯一索引直接替换)