![仅使用 MyISAM 的 8GB MySQL 服务器的最佳 my.cnf 配置](https://linux22.com/image/574098/%E4%BB%85%E4%BD%BF%E7%94%A8%20MyISAM%20%E7%9A%84%208GB%20MySQL%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%9C%80%E4%BD%B3%20my.cnf%20%E9%85%8D%E7%BD%AE.png)
我正在准备一个基于 Drupal 6.x 的大型安装,并设置了一个具有 8GB RAM 的专用 MySQL 服务器。Drupal 6.x 仅使用 MyISAM 引擎,将有大约 500 个并发用户通过两个 Web 节点使用该站点。
这是 mysql 调优入门分析的转储,我是在一大早拍摄的,因为我不确定是否应该在高使用率期间运行它:http://pastie.org/3279741。
我对 mysql 配置不是很有经验,所以我在寻求帮助,以确定 my.cnf 文件的正确配置,以便我可以承受负载量。我非常急需这个,所以不想寻找资源来理解(至少现在不想!)。
提前致谢!
答案1
我不知道 drupal。但正如你所说,你需要专用的 MyIsam MySql 配置。对于 MyIsam,我有一些建议
key_buffer_size
用于缓存 MyISAM 表的索引块的键缓冲区的大小。不要将其设置为大于可用内存的 30%,因为操作系统也需要一些内存来缓存行。即使您不使用 MyISAM 表,您仍应将其设置为 8-64M,因为它还将用于内部临时磁盘表。因此你应该将其从 2GB 设置为 3GB。
read_buffer_size
用于对 MyISAM 表进行全表扫描的缓冲区大小。如果需要进行全表扫描,则按线程分配。您应该将其设置为 8MB 到 16MB。
read_rnd_buffer_size
排序后按排序顺序读取行时,将通过此缓冲区读取行以避免磁盘寻道。如果将此值设置为高值,则可以大大提高 ORDER BY 性能。在需要时按线程分配。
bulk_insert_buffer_size
MyISAM 使用特殊的树状缓存来加快批量插入(即 INSERT ... SELECT、INSERT ... VALUES (...)、(...)、... 和 LOAD DATA INFILE)的速度。此变量限制缓存树的大小(以每个线程的字节数为单位)。将其设置为 0 将禁用此优化。为获得最佳性能,请勿将其设置为大于“key_buffer_size”。检测到批量插入时会分配此缓冲区。将其设置为 512 MB 到 1GB。
myisam_sort_buffer_size
当 MySQL 需要在 REPAIR、OPTIMIZE、ALTER 表语句中重建索引以及在 LOAD DATA INFILE 中将索引重建到空表中时,会分配此缓冲区。它是按线程分配的,因此在设置较大时要小心。所以你应该将其设置为 2M
myisam_max_sort_file_size
MySQL 在重新创建索引时(在 REPAIR、ALTER TABLE 或 LOAD DATA INFILE 期间)允许使用的临时文件的最大大小。如果文件大小大于此值,则将通过键缓存创建索引(速度较慢)。根据需要进行设置。
myisam_repair_threads
如果表有多个索引,MyISAM 可以使用多个线程通过并行排序来修复它们。如果您有多个 CPU 和足够的内存,这是有意义的。将其设置为 1。
myisam_recover
自动检查并修复未正确关闭的 MyISAM 表。
答案2
实际上,Drupal(甚至 6.x)更喜欢在 InnoDB 上运行。MyISAM 是默认设置,是的,但这只是因为有意识地努力支持不提供 InnoDB 的托管商——请参阅http://drupal.org/node/301362。因此,我强烈建议您重新考虑仅使用 MyISAM。
需要注意的是:search_* 表使用 FULLTEXT 索引,这与 InnoDB 不兼容。保留这些 MyISAM,或者更好的是,用 Apache Solr 之类的东西替换它们的功能。
如果您在转换为 InnoDB 后确实使用 mysqltuner.pl,除非它最近已更新,否则它不会费心告诉您设置 innodb_buffer_pool,这是 InnoDB 最大的性能关键。
从 MyISAM 到 InnoDB 的转换过程是无损的,而且相对较快;这只是一个简单的ALTER TABLE
sometable ENGINE=InnoDB
。在执行此操作之前,请确保已设置 innodb_buffer_pool ,否则您可能需要等待很长时间!
最后,我想简单提一下,具有大规模 Drupal 部署经验的托管服务提供商将为您处理大部分或所有这些步骤。考虑与 BlackMesh(我为其工作)或 Drupal 社区中活跃的其他托管商联系。随着您继续发展网站,他们可能会提供额外的 Drupal 特定支持和扩展建议。
祝你好运!
答案3
是的,您需要在真实负载下运行,而不是模拟负载。这些数字代表了过去的表现,因此如果这不像真实负载,它们就不会发挥应有的作用。
只需按照 mysqltuner 的指示进行操作即可。
如果您没有时间了解产品调优的细节,只想遵循最佳实践,mysqltuner 就是您的不二之选!它的作用正是如此:捕获最佳实践建议,并根据您的实际使用情况告诉您需要更改哪些内容。