不是一个系统pipe理员,所以…我们有一个MySQL 5.0.22实例大小约为4GB的数据库。 该表是InnoDB / UTF-8。 基本上有一个针对索引列的查询。 硬件有16GB的内存。 理想情况下,我想要pipe理,以便数据文件和索引文件应始终在内存中(写入刷新到磁盘)。 这台服务器上的活动很less。
假设它有足够的内存(我认为它),这应该是预期的行为,而不交换到磁盘?
我怎么能确认这种行为正在发生?
提前致谢
如果你没有其他需要运行内存的应用程序,那么在内存中适合你的“工作集”应该没有问题。 完全。 我有几个SQL服务器正是这样做的。 它们提供出色的读取性能,并没有造成任何麻烦。
要做的事情:
确保mysql被告知为innodb分配足够的缓冲池 – 在my.cnf中:
innodb_buffer_pool_size = 8GB
只要你没有任何其他内存饥饿的应用程序[阿帕奇/任何应用服务,定制的东西] – 尽量减less可用的交换[有这个问题有不同的矛盾'学校'。 我会把1GB的交换+显示器,并确保它没有使用。 ]; [你可以阅读一些关于交换的意见]
确保在启动之后,mysql被“热身” – 运行查询,强制mysql读取表中的每一行/列。 简单:
从表中selectmd5(col1),md5(col2)
应该做的伎俩。 重复修改这个查询[例如length(col1)],确保从内存中读取数据。 为了进行更科学的检查,您可以并排运行iostat并确保磁盘未被触碰。 更加科学化 – 你可能想通过执行来查看innodb的统计信息[以确保一个接一个地执行新版本的查询时没有I / O
显示引擎INNODB状态\ G
更多关于在这里和这里解释输出。