如何优化MySQL的内存使用率?


9

我的设置(示例

我在具有以下规格的Amazon High CPU超大型EC2实例上运行Linux:

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

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

问题

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

您可以使用htop程序进行检查。
neworld 2011年

最大化内存使用率不会将整个数据库存储到内存中。您必须具有基于RAM的文件系统...

4
基于RAM的文件系统是不安全的。如果服务器崩溃,所有数据将丢失
neworld 2011年

Answers:


7

这是一个很难的话题。在这里无法回答,有关此的整本书已经写完了。我建议使您的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-性能优化基础/ http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

编辑:

正如@ drew010所说的那样,考虑数据库的使用类型很重要。重读数据库的调整与重写数据库的调整非常不同。另外,您可以考虑其他策略。像Memcached,nosql数据库等。


2
相对来说,它们是很小的数据库。如果您希望获得大量的数据库读取访问权限,则可以考虑使用诸如memcached之类的缓存系统,您的应用程序可以使用该缓存系统来存储数据库中的值以减少对数据库的访问。如果您主要执行插入操作,那么磁盘将是一个非常重要的因素。在某种程度上,问题取决于您的用例。如果数据变化不大,那么mysql查询缓存也可以通过更快的查询提供很多帮助。还要确保索引/主键正确。
drew010 2011年

+1你是对的兄弟。我以为他是在要求基本调教,但是考虑使用数据库和其他东西很重要。同样,我认为不能在这里讨论。
santiago.basulto

1

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.