如何优化 MySQL 的内存使用?

如何优化 MySQL 的内存使用?

我的设置(例子

我在 Amazon High CPU Extra Large EC2 实例上运行 Linux,其规格如下:

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

我有两个大型 MySQL 数据库在 MyISAM 存储引擎上运行。一个是 2GB,另一个是 500MB。我想确保 MySQL 尽可能多地使用 RAM 以最大限度地提高查询速度。我知道有很多 MySQL 内存配置选项,例如和,key_buffer_sizeMyISAM_sort_buffer_size,我不熟悉如何优化它们。

问题

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

答案1

这是一个很难的话题。这里无法回答,整个图书已经有人写过关于这个的文章。我建议将你的 innodb_buffer_pool_size 设得足够大。如果你使用的是 myisam 表,那么请检查 key_buffer_size。还应该考虑 table_cache 和 max_connections。

以下信息或许能帮到你:

http://www.mysqlperformanceblog.com/2006/09/29/mysql-server-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 所说,考虑数据库的使用类型很重要。对大量读取数据库的调整与对大量写入数据库的调整非常不同。此外,您还可以考虑其他策略。例如 Memcached、nosql 数据库等。

答案2

如果你需要确保 MySQL 使用了它所需的所有内存,那么你必须切换到 InnoDB。除非你使用 MySQL 的FULLTEXT搜索功能,否则不会有任何严重的问题。

对于 MyISAM,会使用许多缓存,包括内部 MySQL 密钥缓冲区和系统缓存。如果想要获得最佳性能,则需要为任一缓存留出空间,但我仍然不建议为此目的使用 MyISAM,尤其是当您的数据库写入繁重时:MyISAM 在写入时锁定整个表,而 InnoDB 仅锁定受影响的行。

即使您将所有数据库都放入内存,由于索引不足或其他原因,查询仍然会运行缓慢。

相关内容