仅使用 MyISAM 的 8GB MySQL 服务器的最佳 my.cnf 配置

Moh*_*san 3 mysql php performance myisam drupal

我正在准备一个基于 Drupal 6.x 的大型安装,并设置了一个具有 8GB RAM 的专用 MySQL 服务器。Drupal 6.x 仅使用 MyISAM 引擎,将有大约 500 个并发用户通过两个 Web 节点使用该站点。

这是 mysql 调优入门分析的转储,我是一大早拿的,因为我不确定这是否应该在高使用率期间运行:http : //pastie.org/3279741

我在 mysql 配置方面不是很有经验,所以我正在寻找帮助来确定 my.cnf 文件的正确配置,以便我能够承受负载量。我非常迫切地需要这个,所以不要寻找理解的资源(至少现在不是!)。

提前致谢!

小智 10

我不知道drupal。但是正如您所问的,您需要专用的 MyIsam MySql 配置。对于 MyIsam 我有一些建议

key_buffer_size
Run Code Online (Sandbox Code Playgroud)

Key Buffer 的大小,用于缓存 MyISAM 表的索引块。不要将其设置为大于可用内存的 30%,因为操作系统也需要一些内存来缓存行。即使您不使用 MyISAM 表,您仍应将其设置为 8-64M,因为它也将用于内部临时磁盘表。所以你应该把它设置为 2GB 到 3GB

read_buffer_size
Run Code Online (Sandbox Code Playgroud)

用于对 MyISAM 表进行全表扫描的缓冲区大小。如果需要完整扫描,则按线程分配。您应该将其设置为 8MB 到 16MB 。

read_rnd_buffer_size
Run Code Online (Sandbox Code Playgroud)

在排序后按排序顺序读取行时,将通过此缓冲区读取行以避免磁盘寻道。如果将其设置为高值,您可以大大提高 ORDER BY 的性能。需要时按线程分配。

bulk_insert_buffer_size
Run Code Online (Sandbox Code Playgroud)

MyISAM 使用特殊的树状缓存来更快地进行批量插入(即 INSERT ... SELECT、INSERT ... VALUES (...)、(...)、... 和 LOAD DATA INFILE)。此变量以每个线程的字节数限制缓存树的大小。将其设置为 0 将禁用此优化。不要将其设置为大于“key_buffer_size”以获得最佳性能。当检测到批量插入时分配此缓冲区。将其设置为 512 MB 至 1GB。

myisam_sort_buffer_size
Run Code Online (Sandbox Code Playgroud)

当 MySQL 需要将 REPAIR、OPTIMIZE、ALTER 表语句以及 LOAD DATA INFILE 中的索引重建到空表中时,会分配此缓冲区。它是按线程分配的,因此请注意较大的设置。所以你应该把它设置为 2M

myisam_max_sort_file_size
Run Code Online (Sandbox Code Playgroud)

MySQL 在重新创建索引时允许使用的临时文件的最大大小(在 REPAIR、ALTER TABLE 或 LOAD DATA INFILE 期间。如果文件大小大于此值,将通过键缓存创建索引(这是较慢)。根据需要将其设置为。

myisam_repair_threads 
Run Code Online (Sandbox Code Playgroud)

如果一张表有多个索引,MyISAM 可以使用多个线程通过并行排序来修复它们。如果您有多个 CPU 和大量内存,这很有意义。将其设置为 1。

myisam_recover
Run Code Online (Sandbox Code Playgroud)

自动检查和修复未正确关闭的 MyISAM 表。