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会对经常访问的页简历哈希索引
日志先行:
日志先行:
日志先行:
日志先行:
日志先行:
日志先行:
日志先行:
日志先行:
日志先行:
日志先行: