仅使用 InnoDB(5gb 数据库)的 8gb RAM 专用 MySQL 服务器的最佳 MySQL 缓存设置

仅使用 InnoDB(5gb 数据库)的 8gb RAM 专用 MySQL 服务器的最佳 MySQL 缓存设置

在设置 MySQL 以提高性能方面,我是个菜鸟。老实说,我并不担心通过微调来榨干 MySQL 的每一点性能,但我知道,要提供最佳结果,最重要的事情是正确设置缓存/缓冲区。

我尝试通过仅使用 InnoDB 作为存储引擎来简化事情。而且我确实有一个专用于 MySQL 的服务器。它有 8GB 的​​ RAM,我应该如何分配它才能最大限度地提高性能?我希望能够将我的整个数据库放入内存中以获得最佳性能。数据库大约有 5GB。这可能吗?

我应该为查询缓存分配多少内存?为 InnoDB 缓冲池分配多少内存?为计算机的其余部分(即与 MySQL 无关的进程)分配多少内存?等等。

由于我没有使用 MyISAM,所以我实际上不需要在密钥缓存中放置大量内存,对吗?

答案1

如果你对数据库本身不太了解,那么这很难。你应该了解一些工具;

关于将整个数据库存储在内存中;任何对数据库进行更改的查询都将保持打开状态,直到在磁盘上执行写入操作。唯一可以避免磁盘成为瓶颈的是具有写入缓存的磁盘控制器。

我将从默认设置开始进行以下更改:

key_buffer_size = 128M
thread_stack = 128K
thread_cache_size = 8
table_cache = 8192
max_heap_table_size = 256M
query_cache_limit = 4M
query_cache_size = 512M

innodb_buffer_pool_size = 4G 

# This is crucial to avoid checkpointing all the time:
innodb_log_file_size = 512M

# If you have control on who consumes the DB, and you don't use hostnames when you've set up permissions - this can help as well.
skip_name_resolve

然后我会观察情况如何,并根据上述工具的输出(以及其他因素)尝试不同的方法。我还会确保使用监控工具绘制趋势图,例如穆宁或者仙人掌,看看我实际处理的是什么样的工作量。就我个人而言,我对 Munin 提供的 MySQL 插件非常有经验。

答案2

恕我直言,你应该能够接受

innodb_buffer_pool_size=5G

这将是 RAM 的 62.5%,足够用于服务器操作系统以及 DB 连接的内存

@kvisle建议使用 mysqltuner.pl。该脚本非常适合判断要分配给 join_buffer_size、sort_buffer_size、read_buffer_size 和 read_rnd_buffer_size 的 RAM 量。将这 4 个缓冲区相加,乘以 max_connections。该答案将添加到静态缓冲区(innodb_buffer_pool_size + key_buffer_size)。报告合并总和。如果合并总和超过 RAM 的 80%,则必须降低这些缓冲区大小。mysqltuner.pl 在这方面将非常有用。

由于您的所有数据都是 InnoDB,因此您可以将 key_buffer_size(MyISAM 索引的键缓存缓冲区)设置得非常低(我建议 64M)。

这是我在 DBA StackExchange 上发表的一篇文章,用于计算 innodb_buffer_pool_size 的推荐大小

更新时间:2011-10-15 19:55 EDT

如果你知道你将有 5GB 的数据,那么我的第一个建议是可以的。但是,我忘了补充一点:

[mysqld]
innodb_buffer_pool_size=5G
innodb_log_file_size=1280M

日志文件大小必须是 InnoDB 缓冲池的 25%

更新时间:2011-10-16 13:36 EDT

25% 规则严格基于使用两个日志文件。虽然可以使用多个 innodb 日志文件,但两个通常效果最好。

其他人表示使用 25%

不过平心而论,原InnoBase Oy 公司有人表示不使用 25% 规则,因为有更大的 InnoDB Buffers Pool

当然,当 RAM 数量巨大时,25% 规则就行不通了。事实上,仅使用 2 个日志文件允许的最大 innodb_log_file_size 是 2047M,因为日志文件的总大小必须小于 4G(4096M)

举个例子:我雇主的一位客户有一个数据库服务器,内存为 192GB。没有办法拥有 48G 的日志文件。我简单地使用 innodb 日志文件的最大文件大小 2047M。@Kvisle 对我的回答的评论只是提供了一个链接,说明您不必将自己限制为两个日志文件。如果您有 N 个日志文件,它们的总大小不能达到 4G。我的 25% 规则只是在理想情况下(数据库服务器内存为 8GB 或更少)。

相关内容