我的设置(例子)
我在 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_size
但MyISAM_sort_buffer_size,
我不熟悉如何优化它们。
问题
- 如何检查 MySQL 当前在 Linux 系统上使用的内存?
- 如何最大化/优化 MySQL 内存使用?
- 假设我的查询和模式已经优化,我还应该考虑哪些其他变化?
答案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 仅锁定受影响的行。
即使您将所有数据库都放入内存,由于索引不足或其他原因,查询仍然会运行缓慢。