(自用)概念

123 阅读2分钟

mysql

mysql日志

  • 错误日志————服务运行过程中发生的严重错误日志。当我们的数据库无法启动时,就可以来这里看看具体不能启动的原因是什么
  • 二进制日志————binlog,记录对数据库的所有更改
    • 作用:主从复制、数据恢复
    • 三种记录格式Statement、Row、MixedLevel。
      • Statement————只记录会修改数据的sql语句,和额外的记录一些上下文信息(这句不重要)
      • Row————只保存被修改的记录,不用记录上下文信息了,只需要关注被改成啥样就行。会产生大量日志
      • MixedLevel————上面两种的杂交
  • 查询日志————记录客户端的所有sql语句
  • 慢查询日志————记录所有效率贼慢的sql语句

innodb

:innodb最小数据单位,一页默认16k,一页里面有数据,有指针等等

缓冲池

  • 缓冲池在内存中。因为数据存在磁盘上,而直接对磁盘进行数据io的效率低、消耗大,所以将一些常用的数据存在内存中。
  • 主要存储内容————数据、索引页、Undo页、插入缓冲、自适应哈希索引、InnoDB锁信息和数据字典

插入缓冲:针对update和insert,数据会先存在缓冲池中,存到一定数量再批量写入磁盘。

缓冲池污染

  • 内存不够用时,缓冲池采用LRU算法————新的数据进来,旧的数据淘汰掉。假如全表扫描,太多数据进来,就会把之前的全部顶掉,导致性能下降。
  • innodb解决方式————日志先行

日志先行:事务开始时,优先记录日志redo log到重做缓冲区redo log buffer中,然后才会更新缓冲池中的数据

脏页:挖坑

两次写:挖坑

innodb日志

  • redo log————记录事务的操作,具体到某一页数据的修改,且记录的是修改后的值,没commit的也会记录
  • undo log————记录事务发生之前的快照,用来回滚的

自适应哈希索引:innodb会对经常访问的页简历哈希索引

日志先行

日志先行

日志先行

日志先行

日志先行

日志先行

日志先行

日志先行

日志先行

日志先行