MySQL innoDB 存储引擎学习篇(3)

mysql> show global status like 'innodb_dblwr%'\G;
*************************** 1. row ***************************
Variable_name: Innodb_dblwr_pages_written
        Value: 10005304
*************************** 2. row ***************************
Variable_name: Innodb_dblwr_writes
        Value: 3272391
2 rows in set (0.01 sec)

可以看到,doublewrite 一共写了10005304个页,但实际的写入次数为3272391,如果你发现你的系统在高峰时Innodb_dblwr_pages_written:Innodb_dblwr_writes远小于64:1,那么说明你的系统写入压力并不是很高.
        如果操作系统在将页写入磁盘的过程中崩溃了,在恢复过程中,Innodb存储引擎可以从共享表中的doublewrite找到改页的一个副本,将其拷贝到表空间文件,再应用重做日志。
        参数skip_innodb_doublewrite可以禁止使用两次写功能,这时可能会发生前面提及的写失效问题。
注意:有些文件系统本身就提供了部分写失效的防范机制,如ZFS文件系统。在这种情况下,我们就不要启用doublewrite了。
        自适应哈希索引
        哈希(hash)是一种非常快的查找方法,一般情况下查找时间复杂度为o(1)。常用于join操作,如SQL Server 和Oracle中的哈希连接(hash join)。但是SQL Server和Oracle等常见的数据库并不支持哈希索引(hash index)。MySQL的Heap存储引擎默认的索引类型为哈希,而Innodb存储引擎提出了另外一种实现方法,自适应hash index(adaptive hash index)。
        Innodb存储引擎会监控对表上索引的查找,如果观察到建立哈希索引可以带来速度的提升,则建立hash index,所以称之为自适应(adaptive)的。自适应哈希索引通过缓冲池的B+tree构造而来,因此建立的速度很快.
Hash table size 9461399, node heap has 2933 buffer(s)
7767.23 hash searches/s, 130.87 non-hash searches/s
        这里主要输出的信息有:包括自适应哈希索引的大小、使用情况、每秒使用自适应hash index搜索的情况。值得注意的是,hash索引只能用来搜索等值的查询,如select * from table where index_col = 'xxx' 而对其他查找的类型,如范围查找,是不能使用的。因此这里出现了non-hash searches/s的情况。用hash searches:non-hash searches命令可以大概了解使用哈希索引后的效率.
        我们可以通过参数innodb_adaptive_hash_index来禁用或启动此特性,默认为开启。

MySQL InnoDB存储引擎锁机制实验

InnoDB存储引擎的启动、关闭与恢复

MySQL InnoDB独立表空间的配置

MySQL Server 层和 InnoDB 引擎层 体系结构图

InnoDB 死锁案例解析

MySQL Innodb独立表空间的配置

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/beb9eeb46fa718de452acc1d1c019f71.html