我如何优化MySQL的内存使用情况?

我的设置(示例

我正在使用以下规格在Amazon High CPU超大型EC2实例上运行Linux:

  • 7 GB的内存
  • 20个EC2计算单元(8个虚拟核心,每个2.5个EC2计算单元)
  • 1690 GB的本地实例存储
  • 64位平台

我有MyISAM存储引擎上运行的两个大型MySQL数据库。 一个是2GB,另一个是500MB。 我想确保MySQL使用尽可能多的RAM,因为它可以/需要最大限度地提高查询速度。 我知道有一些MySQL内存configuration选项,如MyISAM_sort_buffer_size,MyISAM_sort_buffer_size,但我不熟悉优化这些。

质询

  1. 如何检查MySQL目前在Linux系统上使用的内存?
  2. 如何最大化/优化MySQL内存使用?
  3. 假设我的查询和模式已经过优化,我应该考虑哪些其他更改?

这是一个很难的话题。 这里不能回答,整本书都写了这个。 我build议让你的innodb_buffer_pool_size足够大。 如果您使用的是myisam表,请检查key_buffer_size。 还应该考虑table_cache和max_connections。

这里有一些可以帮助你的东西:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- performance-optimization-basics / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

编辑:

正如@ drew010所说,考虑数据库的使用types非常重要。 对重读数据库的调整与重写相比是非常不同的。 另外,你可以考虑其他策略。 像Memcached,nosql数据库等

如果你需要确保MySQL使用所有需要的内存,你必须切换到InnoDB。 除非您使用MySQL FULLTEXTsearchfunction,否则不会有任何严重的问题。

在MyISAM的情况下使用了一些caching,包括内部的MySQLcaching和系统caching。 如果你想获得最好的性能,你需要给任何一个caching留下空间,但是我仍然不推荐MyISAM用于这个目的,特别是如果你的数据库写的很重的话:MyISAMlocking整个表,而InnoDB只locking受影响的行。

即使你把你所有的数据库都放到内存中,由于索引不足或者其他原因,仍然可能会运行缓慢的查询。