《innodb技术内幕》读书笔记

零、安装mysql

下载地址:dev.mysql.com/downloads/m…

mac启动配置:系统偏好-mysql,通过configuration选项可以查看安装路径,安装过程需要给root配置一个密码

启动:mysql -u root -p



一、mysql体系及引擎

1.1数据库&&实例

  • 数据库:文件
  • 实例:操作数据库的进程,多线程架构
  • 如下图:1550为mysql进程号


  • mysql各个配置文件路径,如下图


配置在各个文件如果不同,按照最后一个为准,没有配置文件,按照编译默认参数运行mysql

  • 查看msyql目录,先添加权限

sudo chown -R $(whoami) /usr/local/mysql


1.2mysql体系

mysql区别于其他数据库,提供了插件式引擎,pluginable storage engine,引擎式基于表的。


1.3存储引擎

存储引擎是开源的,用户可以根据应用场景自己选择、修改、甚至自己编写。innnodb就是最著名的第三方引擎,后被oracle收购。

简单介绍了几种引擎

  • innodb:支持事物,mvvc
  • myisam:不支持事务
  • ndb:集群,内存存储
  • memory:内存型
  • archive:只支持insert,select,压缩比高
  • federated:指向远程服务器,本身不存数据
  • maria:创始人michael widenus开发,旨在取代myisam,支持事务、mvcc
  • 其他

1.4各存储引擎间的比较

各引擎比较,如下图


查看当前数据库支持的引擎

同样创建一张表,使用不同的引擎,占用的存储空间不同

1.5mysql链接方式

实质是进程间的通信方式

  • tcp/ip
  • 套接字:对fd or tcp/ip抽象封装
  • 管道:存在内存中的fd


二、innodb

mysql的默认引擎是innodb

innodb体系结构如下图




后台线程

  • master thread:
  • io thread:aio
  • purge thread:回收undo页
  • page cleaner thread:脏页刷新

内存

  • 缓冲池
  • lrulist(存储热点数据)、freelist、flushlist(存储脏页回写)
  • redo log buffer
  • 额外缓冲


checkpoint机制:设定合适的参数,将脏页回写到磁盘

innodb的关键特性

  • 插入缓冲:提高非聚集不唯一索引的插入性能,因为非聚集索引可能不再同一个页,b+树实现
  • 两次写double write:防止刷盘页的部分成功,部分失败的问题。
  • 自适应hash:热点数据进行hash索引
  • 异步io
  • 刷新邻接页

启动、关闭、恢复参数设置

三、文件

参数文件

  • 查看参数文件列表:mysql mysql --help | grep my.cnf
  • 查看参数

日志文件

  • 错误日志


  • 慢查询日志

慢查询时间阈值设定


慢查询日志查看


binlog 二进制文件



socket文件


pid文件


表文件

  • 表空间文件 frm
  • redo log

四、表

_rowid默认创建主键id


共享缓冲表空间:undo信息、事务信息


每张表空间射者


行格式row_format

compact

除下面字段,还有row-id,事务id,回滚指针



redundant



行溢出


后续版本出现了compressed、dynamic、char存储结构

页结构


约束

主键、外键、唯一索引、not null

视图、物化视图

分区

range

list

hash

key

column

五、索引

b+树:保证矮胖、减少io

全文

hash

聚集索引

非聚集索引

联合索引

覆盖索引

六、锁

共享锁 s lock

排他锁 x lock

行锁

表锁

意向锁:上x行锁,必意向表锁,提高事务上锁效率

mvcc:repeatable - commit 表现不同

一致性非锁定读;有了mvcc,读不依赖另外一个事务释放锁

一致性锁定读:select for update , select for share mode

record lock

gap lock: 防止多个事务在一个范围内插入数据

next key lock:record lock+ gap lock,防止在repeatable 级别下产生幻读

脏读

不可重复读

丢失更新:两个事务对相同的记录修改,后发先至,更新覆盖,解决办法是加x锁

死锁

七、事务

redo log、undo  log 保证事务的原子性、持久性、一致性。

undo log 是mvcc的一部分




猜你喜欢

转载自juejin.im/post/5e80098551882573ca365f80