如何确定为MyISAM使用多个密钥缓存是否有帮助?

时间:2011-11-16 17:15:42

标签: mysql database performance myisam

我正在使用带有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

0 个答案:

没有答案