在一些文档中,我发现我们可以将 key_buffer_size 分配给 myisam 表。这还包括以下步骤:
SET GLOBAL myisam_table.key_buffer_size = 4194304;
CACHE INDEX test.myisam_table IN myisam_table;
LOAD INDEX INTO CACHE test.myisam_table;
该命令运行良好。
但是我怎样才能看到key_buffer_size
不是全局的 MyISAM 表呢?
是否有任何其他支持类似功能的 MySQL 引擎?
您不能为特定表提供此值,此值表示 MyISAM 表的索引块已缓冲并由所有线程共享。
key_buffer_size
是用于索引块的缓冲区大小。密钥缓冲区也称为密钥缓存。http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size
InnoDB 引擎类型确实支持名为innodb_buffer_pool_size 的类似选项
InnoDB 用于缓存其表的数据和索引的内存缓冲区的大小(以字节为单位)。默认值为 8MB。该值设置得越大,访问表中的数据所需的磁盘 I/O 就越少。在专用数据库服务器上,您最多可以将其设置为机器物理内存大小的 80%。但是,不要将它设置得太大,因为物理内存的竞争可能会导致操作系统中的分页。
在您的问题中,您给出了设置专用密钥缓存的正确语法(请参阅LOAD INDEX INTO CACHE)
我之前写过这个
一旦您将一个或多个表分配给专用密钥缓存并运行
LOAD INDEX INTO CACHE
:如果要确保缓存的内容不会过多,请执行以下操作:
STEP01) 运行这个查询
这将计算默认密钥缓存应该有多大(以 MB 为单位)以保存所有 MyISAM 索引页面。
STEP02) 分配推荐号码
假设来自 STEP01 的查询是 5G。
所以在第一种情况下
在第二种情况下
STEP03)
service mysql restart
STEP04) 运行您的生产系统一周
STEP05) 运行这个查询
无论这两个数字返回什么,相乘并除以 1048576。这将为您提供在 MyISAM 密钥缓存中使用了多少 MB 的空间。将该数字乘以 1.05 并将其四舍五入到最接近的整数。无论该数字是多少,这就是您用作 key_buffer_size 最终值的数字。
您必须在 6 个月内再次执行这 5 个步骤,以确保 MyISAM 数据索引的工作集具有最安全的值。它还可能显示您是否需要在 DB 服务器上扩展 RAM。