a picture of innodb_adaptive_hash_index
在默认情况下,innodb_adaptive_hash_index都是被打开的,大家可以通过如下的方式查看:
root@(none) 11:32:56>show variables like '%adaptive%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| innodb_adaptive_hash_index | ON |
+----------------------------+-------+
我选择了两个mysql数据库系统,查看了innodb status中关于 ADAPTIVE HASH INDEX部份,得到的信息如下:
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2,
0 inserts, 0 merged recs, 0 merges
Hash table size 42499631, used cells 30149, node heap has 46 buffer(s)
0.22 hash searches/s, 618.09 non-hash searches/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2,
0 inserts, 0 merged recs, 0 merges
Hash table size 42499631, used cells 1644761, node heap has 2475 buffer(s)
21688.13 hash searches/s, 5885.36 non-hash searches/s
从上面的显示结果可以看出,第一个通过hash searching命中率的相当低,hash表所占的内存大小为46*16k=736k;而第二个命中率比较高,hash表所占的内存大小为2475*16k=39600k。出现如上的情况,跟这两个数据库所运行的业务系统有着直接的关系,大家的系统是否存在这样的情况呢?