细说事物(第二天)

隔离性(扩展:MVCC/SNAPSHOT ISOLATION)

  • 读已提交
  • 读未提交
  • 可重复读
  • 序列化读
  • 快照隔离界别
    • 用新的方式实现传统意义上读为提交的场景,同时保证可序列化的隔离级别。
    • 写>读时会增加系统成本
    • Mvcc适合读写比率比较高的情况

    持久性(扩展:持久性保证策略)

  • RAID*
  • 如何保证数据同时写到两块磁盘
  • 每一次请求都要刷磁盘性能过低,将请求打包统一发送到快存储
    1. 直接写入内存
      • 优点:IOPS高
      • 缺点:丢数据
    2. Group commit
      • 优点:保证系统的持久性和吞吐量
      • 缺点:请求延迟提升

单机事务的典型异常应对策略

  • 业务属性不匹配-回滚
  • 系统DOWN机回复
    • 重启后进入recovery
      • 提交后的事务单元继续完成提交
      • 未提交事务单元回滚

事务的调优原则

  1. 在不影响业务应用的前提下
    • 减少锁的覆盖范围
    • Myisam表锁->Innodb行锁
    • 原子锁->MVCC多版本
  2. 增加锁上可并行线程数
    • 读锁写锁分离,允许并行读取数据
    • 多线程并行读取
  3. 乐观锁/悲观锁
    • 悲观锁-适合并发争抢比较严重的场景

      是线程到blocking状态,通知信息OK状态切换回等待状态,需要不停的换入换出.

    • 乐观锁-适合并发争抢比较不太严重的场

事务单元扩展

Tow Phase lock(2PL)

死锁扩展-U锁

更新锁-更新对只读情况,升级写锁

MVCC拾遗

乐观锁并发方案: 让版本低的并发更新回滚

  • 优势:并发低时性能好
  • 代价:并发高时失败率高,需要不断重试