写点什么

软件测试 | 影响 MySQL 性能的重要参数

  • 2023-08-01
    北京
  • 本文字数:1885 字

    阅读完需:约 6 分钟

更多学习资料戳!!!

key_buffer_size 的设置

首先看看 MySQL(MySQL 服务器启动命令,加“--verbose -help”显示全部启动选项)中是如何定义的 key_buffer_size 参数的:

[root@localhost zzx]# mysql -vrebose --help|grep key_buffer_size=--key_buffer_size=# The size of the buffer used for index for index blocks for MyISAM
复制代码

从以上定义可以看出,这个参数是用来设置索引快(Index Blocks)缓存的大小,它被所有线程共享,此参数只适用于 MyISAM 存储引擎。MySQL5.1 以前允许使用一个系统默认的 key_buffer,这样可以更小地降低线程之间的竞争。

可以这样建立一个索引缓存:

mysql>set global hot_cache2.key_buffer_size=128*1024;Query OK, 0 rows affected(0.01 sec)
复制代码

其中,global 表示对每一个新的连接,此参数都将生效。hot_cache2 是新的 key_buffer 名称。

如果需要更改参数值,可以随时进行重建,例如;

mysql>set global hot_cache2.key_buffer_size=200*1024;Query OK,0 rows affected(0.00sec)
复制代码

然后可以把相关表的索引放到指定的索引缓存中,如下:

mysql> cache index sales,sales2 in hot_cache2; +---------------+--------------------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------------+--------------------+----------+----------+| sakila.sales | assign_to_keycache | status | OK | | sakila.sales2 | assign_to_keycache | status | OK | +---------------+--------------------+----------+----------+ 2 rows in set (0.04 sec)
复制代码

想要将索引预装到默认 key_buffer 中,可以使用 LOAD INDEX INTO CACHE 语句。例如,下面的语句可以预装表 sales 的所有索引:

mysql> load index into cache sales ; +--------------+--------------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------+--------------+----------+----------+ | sakila.sales | preload_keys | status | OK | +--------------+--------------+----------+----------+ 1 row in set (0.00 sec)
复制代码

如果需要删除索引缓存,则要使用下面命令;

mysql> set global hot_cache2.key_buffer_size=();Query OK,0 rows affected(0.00 sec)
复制代码

请注意不能删除默认可以_buffer。来看一下实际删除结果:

mysql> show variables like 'key_buffer_size'; +-----------------+---------+ | Variable_name | Value | +-----------------+---------+ | key_buffer_size | 8388600 | +-----------------+---------+ 1 row in set (0.00 sec) mysql> set global key_buffer_size=0; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> show warnings; +---------+------+------------------------------+ | Level | Code | Message | +---------+------+------------------------------+ | Warning | 1438 | Cannot drop default keycache | +---------+------+------------------------------+ 1 row in set (0.01 sec)
复制代码

可以看出,虽然提示设置成功,但是有一个 warning “Cannot drop default keycache”,提示不能删除默认 key_buffer。重新创建一个连接后,参数值果然没有更改:

[zzx@localhost ~]$ mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 5.0.41-community-log MySQL Community Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show variables like 'key_buffer_size';+-----------------+---------+ | Variable_name | Value | +-----------------+---------+ | key_buffer_size | 8388600 | +-----------------+---------+ 1 row in set (0.00 sec)
复制代码

cache index 命令在一个表和 key_buffer 之间建立一种联系,但每次服务器重启时 key_buffer 中的数据将清空。如果想要每次服务器重启时响应表的索引能自动放到 key_buffer 中,可以在配置文件中设置 init-file 选项来制定包含 cache index 语句的文件路径,然后在对应的文件中写入 cache index 语句。下面是一个例子:

[zzx@localhost ~]$ more /etc/my.cnf key_buffer_size = 4G hot_cache.key_buffer_size = 2G cold_cache.key_buffer_size = 2G init_file=/path/to/data-directory/mysqld_init.sql 
复制代码

每次服务器启动时执行 mysql_init.sql 中的雨具,该文件每行应包含一个 SQL 语句。下面的例子分配几个表,分别对应 hot_cache 和 cold_cache:

CACHE INDEX a.t1, a.t2, b.t3 IN hot_cache; CACHE INDEX a.t4, b.t5, b.t6 IN cold_cache;
复制代码


用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | 影响MySQL性能的重要参数_测试_测吧(北京)科技有限公司_InfoQ写作社区