+-----------------+------------+
| key_buffer_size | 536870912 |
+-----------------+------------+
分配了 512MB 内存给 key_buffer_size,我们再看一下 key_buffer_size 的使用情况:
mysql> show global status like 'key_read%';
+------------------------+-------------+
| Variable_name | Value | mysql
+------------------------+-------------+
| Key_read_requests | 27813678764 |
| Key_reads | 6798830 |
+------------------------+-------------+
一共有 27813678764 个索引读取请求,有 6798830 个请求在内存中没有找到直接从硬盘读取索引,计
算索引未命中缓存的概率:
key_cache_miss_rate = Key_reads / Key_read_requests * 100%
比如上面的数据,key_cache_miss_rate 为 0.0244%,4000 个索引读取请求才有一个直接读硬盘,
已经很 BT 了,key_cache_miss_rate 在 0.1%以下都很好(每 1000 个请求有一个直接读硬盘),如果
key_cache_miss_rate 在 0.01%以下的话,key_buffer_size 分配的过多,可以适当减少。
MySQL 服务器还提供了 key_blocks_*参数:
mysql> show global status like 'key_blocks_u%';
+------------------------+-------------+
| Variable_name | Value |
+------------------------+-------------+
| Key_blocks_unused | 0 |
| Key_blocks_used | 413543 |
+------------------------+-------------+
Key_blocks_unused 表示未使用的缓存簇(blocks)数,Key_blocks_used 表示曾经用到的最大的
blocks 数,比如这台服务器,所有的缓存都用到了,要么增加 key_buffer_size,要么就是过渡索引了,
把缓存占满了。比较理想的设置:
Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%
四、临时表
mysql> show global status like 'created_tmp%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Created_tmp_disk_tables | 21197 |
| Created_tmp_files | 58 |
| Created_tmp_tables | 1771587 |
+-------------------------+---------+
每次创建临时表,Created_tmp_tables 增加,如果是在磁盘上创建临时表,
Created_tmp_disk_tables 也增加,Created_tmp_files 表示 MySQL 服务创建的临时文件文件数,比
较理想的配置是:
Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%
比如上面的服务器 Created_tmp_disk_tables / Created_tmp_tables * 100% = 1.20%,应
该相当好了。我们再看一下 MySQL 服务器对临时表的配置:
mysql> show variables where Variable_name in ('tmp_table_size',
'max_heap_table_size');
+---------------------+-----------+
| Variable_name | Value |
文档被以下合辑收录
评论