软件测试 | 影响MySQL性能的重要参数
key_buffer_size的设置
首先看看MySQL(MySQL服务器启动命令,加“--verbose -help”显示全部启动选项)中是如何定义的key_buffer_size参数的:
从以上定义可以看出,这个参数是用来设置索引快(Index Blocks)缓存的大小,它被所有线程共享,此参数只适用于MyISAM存储引擎。MySQL5.1以前允许使用一个系统默认的key_buffer,这样可以更小地降低线程之间的竞争。
可以这样建立一个索引缓存:
其中,global表示对每一个新的连接,此参数都将生效。hot_cache2是新的key_buffer名称。
如果需要更改参数值,可以随时进行重建,例如;
然后可以把相关表的索引放到指定的索引缓存中,如下:
想要将索引预装到默认key_buffer中,可以使用LOAD INDEX INTO CACHE语句。例如,下面的语句可以预装表sales的所有索引:
如果需要删除索引缓存,则要使用下面命令;
请注意不能删除默认可以_buffer。来看一下实际删除结果:
可以看出,虽然提示设置成功,但是有一个warning “Cannot drop default keycache”,提示不能删除默认key_buffer。重新创建一个连接后,参数值果然没有更改:
cache index 命令在一个表和key_buffer之间建立一种联系,但每次服务器重启时key_buffer中的数据将清空。如果想要每次服务器重启时响应表的索引能自动放到key_buffer中,可以在配置文件中设置init-file选项来制定包含cache index语句的文件路径,然后在对应的文件中写入cache index语句。下面是一个例子:
每次服务器启动时执行mysql_init.sql中的雨具,该文件每行应包含一个SQL语句。下面的例子分配几个表,分别对应hot_cache和cold_cache: