InnoDB: Warning: a long semaphore wait:
The relevant parts of the InnoDB monitor output shows:
Which two options would help avoid the long wait in the future?
A、Increase the value of the innodb_lock_wait_timeout option.
B、Increase the value of the innodb_read_io_threads option.
C、Change the table to use HASH indexes instead of BTREE indexes.
D、Set the value of innodb_adaptive_hash_index to zero.
E、Deactivate the query cache.
F、Increase the size of the InnoDB buffer pool.
D、E
本题考察的是InnoDB各种与性能有关的配置。
官方参考文档
innodb_read_io_threads系统变量代表InnoDB中读取操作的I/O线程数量。InnoDB使用后台线程来服务各种类型的I/O请求。你可以使用innodb_read_io_threads和innodb_write_io_threads配置参数来配置服务于数据页的读和写I/O的后台线程的数量。这些参数分别标志着用于读和写请求的后台线程的数量。它们在所有支持的平台上都有效。你可以在MySQL选项文件(my.cnf或my.ini)中为这些参数设置值;你不能动态地改变值。这些参数的默认值是4,允许的值范围是1-64。
官方参考文档
官方参考文档
Innodb存储引擎会监控对表上二级索引的查找,如果发现某二级索引被频繁访问,二级索引成为热数据,建立哈希索引可以带来速度的提升。经常访问的二级索引数据会自动被生成到hash索引里面去(最近连续被访问三次的数据),自适应哈希索引通过缓冲池的B+树构造而来,因此建立的速度很快。
自适应哈希索引由innodb_adaptive_hash_index变量启用,或者在服务器启动时由–skip-innodb-adaptive-hash-index关闭。
自适应哈希索引的优点:
1、无序,没有树高,访问速度更快
2、降低对二级索引树的频繁访问资源
3、自适应
自适应哈希索引的缺点:
1、hash自适应索引会占用innodb buffer pool;
2、自适应hash索引只适合搜索等值的查询,如select * from table where index_col=‘xxx’,而对于其他查找类型,如范围查找,是不能使用的;
官方参考文档
参考文档
B树索引的特点:
哈希索引的特点
1/ 它们只用于使用=或<=>运算符的平等比较(但速度非常快)。它们不用于查找数值范围的比较运算符,如<。依靠这种类型的单值查找的系统被称为 “键值存储”;要将MySQL用于这种应用,应尽可能使用哈希索引。
2. 优化器不能使用哈希索引来加速ORDER BY操作。(这种类型的索引不能用于搜索顺序的下一个条目)。
3. 只有整个键可以被用来搜索一条记录。(对于B树索引,键的任何最左边的前缀都可以用来寻找行)。
官方参考文档
innodb_adaptive_hash_index系统变量表示InnoDB的自适应哈希索引是否被启用或禁用。这个变量在默认情况下是启用的。你可以使用SET GLOBAL语句修改这个参数,而不需要重新启动服务器。在运行时改变设置需要足够的权限来设置全局系统变量。
禁用自适应哈希索引会立即清空哈希表。当哈希表被清空时,正常的操作可以继续进行,而执行使用哈希表的查询则直接访问索引B树。
官方参考文档