读MySQL技术内幕笔记

1.Mysql 单进程多线程
2.数据库和实例的定义
  • 数据库:物理操作系统文件或其他形式文件类型的集合。
  • 实例:Mysql数据库实例在系统上的表现就是一个进程。是位于用户和操作系统之间的一层数据管理软件。
3.Mysql组成部门
  1. 连接池组件
  2. 管理服务和工具组件
  3. SQL接口组件
  4. 查询分析器组件
  5. 优化器组件
  6. 缓冲(Cache)组件
  7. 插件式存储引擎
  8. 物理文件
4.InnoDB后台线程
  1. Master Thread
  • 负责将缓冲池中的数据异步刷新到磁盘,保证数据一致性,包括脏页的刷新,合并插入缓冲(INSERT BUFFER),UNDO页的回收。
  1. IO THREAD
  • 负责IO请求的回调处理
  1. Purge【清理】 Thread
  • 回收已经使用并分配的undo页。
  1. Page Cleaner Thread
  • 将之前版本中脏页的刷新操作都放入单独的线程中来完成。其目的是为了减轻原Master Thread的工作及对于用户查询线程的阻塞,进一步提高InnnoDB存储引擎的性能。
5.重做日志缓冲
  • InnoDB存储引擎首先将重做日志信息先放入redo log 缓冲区,然后按一定频率将其刷新到重做日志文件。重做日志缓冲一般不需要设置得很大,因为一般情况下每一秒会将重做日志缓冲刷新到日志文件,因此用户只需要保证每秒产生的事务量在这个缓冲大小之内即可。
  • 重做日志缓冲刷新到磁盘中重做日志文件的情况
  1. Master Thread 每一秒将重做日志缓冲刷新到重做日志文件
  2. 每个事务提交时会将重做日志缓冲刷新到重做日志文件里。
  3. 当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件。
6.redo log与bin log
  1. bin log 日志会记录所有与mysql数据库有关的日志记录,包括InnoDB,MyISAM等其它存储引擎的日志。而InnoDB存储引擎的重做日志只记录有关该存储引擎本身的事务日志。
  2. bin log记录的是一个事务的具体操作内容,即该日志的逻辑日志。而InnoDB记录关于每个页的更改的物理情况。
  3. bin log仅在事务提交前进行提交。只写磁盘一次。而在事务进行过程中,却不断有重做日志条目被写入到重做日志文件中。
6.Checkpoint(检查点)

当数据库发生宕机时,数据库不需要重做所有日志,因为Checkpoint之前的页都已经刷新回磁盘。故数据库只需要对Checkpoint后的重做日志进行恢复,大大缩减恢复的时间。

  1. 缩短数据库恢复时间
  2. 缓冲池不够用时,将脏页刷新到磁盘
  3. 重做日志不可用时,刷新到脏页
7.InnoDB逻辑存储结构

所有数据都被逻辑地放在一个空间,称之为表空间

  • 表空间组成
    • 段(segment)
    • 区(extent)
    • 页(page)
表空间
  • ibdata1 默认表空间
8.Innodb不支持hash索引
9.show index from 显示索引信息
主要字段
  • Collation(校对): 列以什么方式存储在索引中。可以是A或Null。B+树索引总是A,即排序。如果使用了Heap存储引擎,并建立了Hash索引,这里就会显示NULL。因为Hash根据Hash桶存放索引数据,而不是对数据进行排序。
  • Cardinality(基数): 非常关键的值,表示索引中唯一的数目估计值。
  • NULL: 是否索引的列含有NULL。
10. 优化器不使用索引的情况
  • 当sql执行范围查找,join链接操作等情况,会发现优化器并没有选择索引去查找数据,而是通过扫描聚集索引。
  • e.g select * from order where orderid>10000 and orderid<12000
  • 选取的数据是整行信息,而orderid索引不能覆盖到查询的信息,因此对orderid索引查询到指定数据后,还需要一次回表查询。回表查询在磁盘上是离散读操作。如果要求访问的数据量很小,则优化器还是会选择辅助索引,但是当访问的数据占整个表中数据量大时(20%左右),优化器会选择通过聚集索引来查找数据。因为顺序读远远快于离散读。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值