MySQL技术内幕-INNODB

文章目录

  • 存储引擎
  • INNODB概述
    • 各版本之间的比较
    • 后台线程
    • 关键特性

存储引擎

  • innodb
    支持事务;行锁;MVCC获取高并发性;聚簇索引;
  • myisam
    不支持事务;表锁;支持全文索引;数据、索引文件分离,数据文件压缩;
  • ndb
    集群存储引擎
  • memory
    数据放内存,适合存储临时数据。
    哈希索引
    表锁
  • archive
    只支持insert 和 select操作。 zlib算法压缩数据行,比例1:10。适合存储归档数据,如日志信息。 行锁,不是事务安全的。
    设计目标:提供高速的插入和压缩功能。
  • maria
    下一代myisam

MySQL中myisam和innodb的主键索引有什么区别?
主要区别是myisam 索引和数据分离,而innodb 叶子节点存储数据。

参考资料:
https://www.cnblogs.com/olinux/p/5217186.html

B- 树和 B+ 树有什么区别?

B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于
走右结点;
B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键
字范围的子结点;
所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;
B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点
中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;
B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率
从1/2提高到2/3;

参考资料:
https://blog.csdn.net/qq_23217629/article/details/52510485
https://www.jianshu.com/p/332caf8bed3a

INNODB概述

各版本之间的比较

老版本的INNODB:    支持ACID,行锁设计, MVCC
INNODB1.0x        继承了上述版本的所有功能,增加了compress和dynamic页格式
INNODB1.1x        继承了上述版本的所有功能,增加了linux AIO,多回滚段
INNODB 1.2x       继承了上述版本的所有功能,增加了全文索引支持,在线索引添加

后台线程

  • Master Thread
  • IO Thread
    show variables like ‘innodb_version’\G;
show variables like 'innodb_%io_threads'\G;
*************************** 1. row ***************************
Variable_name: innodb_read_io_threads
        Value: 4
*************************** 2. row ***************************
Variable_name: innodb_write_io_threads
        Value: 4
2 rows in set (0.00 sec)
select version()\g;
+------------+
| version()  |
+------------+
| 5.6.34-log |
+------------+
1 row in set (0.00 sec)
  • Purge Thread
    事务提交后,其所使用的undolog可能不再需要,PurgeThread来回收已经使用并分配的undo页。
show variables like 'innodb_purge_threads'\G;
*************************** 1. row ***************************
Variable_name: innodb_purge_threads
        Value: 1
1 row in set (0.00 sec)
  • Page Cleaner Thread
    1.2.x 版本引入的。
    脏页刷新操作 独立到单独线程来完成。

关键特性

  • 插入缓冲 Insert Buffer (性能提升,不是直接写,快速写再做merge)
    • 使用条件:
      (1) 索引是辅助索引
      (2) 索引不是唯一的
    • 是一颗B+树,使用共享表空间
  • 两次写 double write(数据页的可靠性)
    MySQL技术内幕-INNODB_第1张图片
mysql> show global status like 'innodb_dblwr%'\G;
*************************** 1. row ***************************
Variable_name: Innodb_dblwr_pages_written
        Value: 5988832213
*************************** 2. row ***************************
Variable_name: Innodb_dblwr_writes
        Value: 419773534
2 rows in set (0.00 sec)
  • 自适应哈希索引
  • 异步io
show variables like 'innodb_use_native_aio'\G;
*************************** 1. row ***************************
Variable_name: innodb_use_native_aio
        Value: ON
1 row in set (0.00 sec)
  • 刷新邻接页

参考资料
《MySQL 技术内幕 --innodb存储引擎》

你可能感兴趣的:(MySQL)