索引缓存大小
MySQL 4.1引进了对每个索引缓存的新变量 key_cache_block_size。这个变量可以指定每个索引缓存的区块大小。用它就可以来调整索引文件I/O操作的性能。
当读缓冲的大小和本地操作系统的I/O缓冲大小一样时,就达到了I/O操作的最高性能了。但是设置索引节点的大小和I/O缓冲大小一样未必能达到最好的总体性能。读比较大的叶子节点时,服务器会读进来很多不必要的数据,这大大阻碍了读其他叶子节点。
目前,还不能控制数据表的索引区块大小。这个大小在服务器创建索引文件 `.MYI' 时已经设定好了,它根据数据表的索引大小的定义而定。在很多时候,它设置成和I/O缓冲大小一样。在将来,可以改变它的值,并且会全面采用变量 key_cache_block_size。
重建索引缓存
索引缓存可以通过修改其参数值在任何时候重建它,例如:
mysql> SET GLOBAL cold_cache.key_buffer_size=4*1024*1024; |
如果设定索引缓存的结构体变量组件变量 key_buffer_size 或 key_cache_block_size 任何一个的值和它当前的值不一样,服务器就会清空原来的缓存,在新的变量值基础上重建缓存。如果缓存中有任何的'脏'索引块,服务器会先把它们保存起来然后才重建缓存。重新设定其他的索引缓存变量并不会重建缓存。
重建缓存时,服务器会把所有的'脏'缓冲的内容先刷新到磁盘中去。之后,缓存的内容就无效了。不过,重建的时候并不阻止那些需要使用指向到缓存中的索引的查询。相反地,服务器使用本地文件系统缓存直接访问数据表索引。文件系统缓存不如索引缓存来的高效,因此,可以预见这时的查询会比较慢。一旦缓存重建完了,指向它的索引又可以使用了,同时也就不再使用文件系统缓存来访问索引了。

