我有一台运行 IIS7 和 MySQL 的 Windows 2008 服务器,内存为 8GB。我一直在跟踪服务器上的内存、CPU 和磁盘使用情况,我发现 MySQL 只使用了 250MB 的内存,尽管我有很多空闲的内存,但磁盘仍然非常繁忙。
在 SQL Server 中,我可以轻松设置我希望它使用的内存量,我在 MySQL 中寻找相同的设置。
如何配置 MySQL 以使用更多内存并减少 CPU 和磁盘使用率?
答案1
table_cache
是最有用的配置指令。每次 MySQL 访问表时,它都会将表加载到缓存中。如果您有大量表,则将它们缓存起来会更快。
通过运行以下命令查看您的服务器变量:
show status;
并查看变量open_tables
。如果该值与您的值相同table_cache
,并且opened_tables
不断上升,则您需要table_cache
在配置文件中增加该值。通过在高峰时段试验这些变量,您将找到平衡点。您需要对其进行配置,以便在高峰时段,opened_tables
即使服务器已经运行了很长时间, 的数量也会很低。
key_buffer_size
也是一个值得尝试的好变量。此变量会影响索引缓冲区大小,增大此变量可提高 MySQL 的索引处理速度。您可以show variables;
再次使用命令查看变量,并与 进行比较key_read_requests
。key_reads
理想情况下,您希望这两个变量之间的比率尽可能低,您可以通过增加 的大小来实现这一点key_buffer_size
。如果将此变量设置得更高,则直接写入和读取磁盘的次数将减少,而这正是您主要关心的问题。
答案2
您需要更改my.cnf
文件中的值并重新启动 MySQL,尽管您也可以在 MySQL 运行时更改其中的许多值('SET GLOBAL VARIABLE=价值')。
您可能希望首先增加key_buffer_size
、sort_buffer
和,如果您有任何 InnoDB 表,则可能read_buffer
增加。其中一些值可以增加很多(甚至两个数量级),尤其是考虑到您的硬件。MySQL 的默认值非常保守,似乎是针对大约十年前的常见混合用途桌面。哦,请注意,32 位版本在使用超过 2GB 的 RAM 时会遇到麻烦。table_cache
innodb_buffer_pool_size
在看MySQL 手册以获取更多信息和指导。