innodb存储引擎之综述

关键词:innodb 存储引擎


摘要:个人学习记录,仅供参考。

innodb存储引擎是mysql数据库的默认存储引擎,对mysql性能优化具有决定性地位,并且其许多特性直接决定了mysql的特性路线。最重要的是学习innodb存储引擎对于程序员了解c++算法、学习数据库性能优化具有极高的价值。


预备:patch的学习

单个文件
diff –uN from-file to-file >to-file.patch
patch –p0 < to-file.patch
patch –RE –p0 < to-file.patch

多个文件
diff –uNr from-docu to-docu >to-docu.patch
patch –p1 < to-docu.patch
patch –R –p1


正文:

特别推荐读者购买 姜承尧 著 《MySQL技术内幕 InnoDB存储引擎》,这是一本对InnoDB存储引擎介绍十分详细的读物,感谢作者耐心详细的讲解。

其次,推荐读者可以尝试阅读 何登成 《Mysql+Innodb源代码调试跟踪分析》,这份文档是我在网络搜索到的,版权问题未知~。


第一步:熟悉mysql的内部信息以及存储引擎信息

innodb存储引擎之综述_第1张图片

第二步:innoDB的内存池结构,缓冲池(buffer pool)、额外的内存池(additional memory pool)以及重做日志缓冲池(redo log buffer)

分别负责 1、维护所有进程/线程需要访问的多个内部数据结构;2、维护磁盘上的数据;3、重做日志缓存等等。

useful command:

mysql> show engine innodb status;

mysql> show variables like 'innodb_buffer_pool_size';
mysql> show variables like 'innodb_additional_men_pool_size';

mysql> show variables like 'innodb_log_buffer_size';

innodb_buffer_pool: data_page, index_page, insert_buffer, lock_info, adaptive_hash_index, data_dictionary;

log_buffer_pool;

innode_additional _mem_pool;

第三步:master thread: loop, background loop, flush loop, suspend loop;

一个很重要的master thread瓶颈在于,如果dirt page > 200 or insert merge > 20,对于以前的传统硬盘由于io读写限制这个值已经是经验极限,但是对于SSD,io水平远超传统硬盘,可以应付每秒极限,但是master thread的hard coding存在无法高效利用SSD性能,造成性能浪费。

innodb_io_capacity等参数就是为此而设计的。

第四步:关键特性:insert buffer, double write, adaptive hash index。

参考:

姜承尧,《MySQL技术内幕 InnoDB存储引擎》

mysql> show variables like 'innodb_additional_men_pool_size';

你可能感兴趣的:(innodb存储引擎之综述)