我正在使用带有MyISAM存储引擎的MySQL 5.5,我正在尝试创建第二个密钥缓存,以便increase performance中提出的this useful tip。
我的问题是:一旦我创建了第二个密钥缓存,我怎么知道它有效?为了监控全局密钥缓存,我们可以使用show status like 'key_read%'
但是如何才能看到新创建的密钥缓存的相同信息?
为了完整起见,这就是我创建第二个密钥缓存的方式:
更改配置文件(''/ etc / my.cnf'')以显式添加另一个缓冲区文件(除了默认缓冲区):
key_buffer_members.key_buffer_size = 512M
告诉MySQL使用“key_buffer_members
”作为表“members
”的索引。
mysql> CACHE INDEX members IN key_buffer_members;
+------------------+--------------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+--------------------+----------+----------+
| myDB.members | assign_to_keycache | status | OK |
+------------------+--------------------+----------+----------+
1 row in set (0.00 sec)
将表索引预加载到缓存中:
mysql> LOAD INDEX INTO CACHE members;
+------------------+--------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+--------------+----------+----------+
| myDB.members | preload_keys | status | OK |
+------------------+--------------+----------+----------+
1 row in set (3.52 sec)
如果没有预加载,索引块仍将根据查询的需要放入密钥缓存中。但是,它们将以随机顺序从磁盘中提取,而不是按顺序提取。在开始使用索引块之前预先加载密钥缓存是一种明智的优化。预加载允许您以最有效的方式将表索引块放入密钥缓存缓冲区:通过顺序从磁盘读取索引块。
创建一个文件以在MySQL启动时预加载索引。将以下内容添加到/etc/my.cnf
:
init-file = '/etc/mysqlinit.sql'
并在/etc/mysqlinit.sql
放置:
USE myDB;
CACHE INDEX members IN key_buffer_members;
LOAD INDEX INTO CACHE members;
重启mysql:
sudo service mysqld condrestart