每日三思-20200826

前言

主要是分享讨论一些有意思的问题,也可以用这个当做MySQL知识体系的自查表

问题项

  1. MySQL查询缓存的利弊及原因?
  2. MySQL引擎Innodb和MyIsam的优缺点及使用场景?
  3. Redolog 和 Binlog的区别及执行过程? 以及使用crash-safe机制如何保证数据丢失后正常恢复?
会飞的大象
讨论数量: 1

自答:

问题1:

  • 查询缓存的优点是进行查询时如果有符合条件的查询缓存,则直接从缓存中返回给客户端,不需要进行后续一系列的操作,减少耗时和资源开销
  • 缺点是查询缓存只要相应表更新,那么该表相关的所有查询缓存会全部失效,对于操作频次较高的表来说,查询缓存的失效率非常高,并且每次进行查询操作还会增加新建查询缓存的处理。另外在mysql8版本后,查询缓存功能已经被删除了。

问题2:

  • Innodb是一个事务型引擎其优点是:支持事务处理、ACID事务特性,支持SQL标准的4中隔离级别,支持行锁和外键约束,可以利用事务日志进行数据恢复,支持分区,表空间。其缺点是服务器资源开销大
  • myisam优点是读速度比较快,占用资源比较少,其缺点是不支持事务,读写互相阻塞,表级锁定,降低了并发性
  • 适用场景:
    • Innodb:需要使用事务的,需要用到行锁的,大量数据读写,适合高并发的业务
    • Myisam:不需要使用事务的操作,查询频繁、写少的场景

问题3:

  • redolog和binlog的区别:
    • redolog是物理日志,属于Innodb引擎特有的,另外redolog是在固定空间大小下进行循环写,当空间被写满的情况下,会擦除之前的旧数据写入新数据
    • binlog是逻辑日志,属于server层的日志,binlog是追加写,每次写入当序号文件满的情况下,写入到下一个序号文件
  • 执行过程:
    • 写入新行 —> 将新行更新到内存中 —> 写入redolog(prepare) —> 写入binlog —> 提交事务(commit)
  • carsh-safe机制:1、写入redolog(prepare) 2、写入binlog 3、commit
    • 操作1完成,操作2时服务器重启,则事务回滚
    • 操作2完成,操作3是服务器重启,重启后重新进行commit
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!