bil*_*rky 20 mysql performance innodb memory database
在设置 MySQL 以提高性能方面,我是一个非常大的菜鸟。老实说,我并不担心从 MySQL 中挤出最后一点性能的微调,但我知道提供一些最佳结果的最重要的事情是正确设置缓存/缓冲区。
我试图通过仅使用 InnoDB 作为存储引擎来保持简单。而且我确实有一个用于 MySQL 的专用服务器。它有 8GB 的 RAM,我应该如何分配它以最大限度地提高性能?我希望能够将我的整个数据库放入内存以获得最佳性能。数据库大约5GB。这可能吗?
我应该为查询缓存分配多少内存?InnoDB 缓冲池多少钱?计算机的其余部分(即非 MySQL 相关进程)多少钱?等等。
由于我没有使用 MyISAM,所以我真的不需要在密钥缓存中放入大量内存,对吗?
Kvi*_*sle 26
如果不了解数据库本身,这很难。您应该了解一些工具;
关于将整个数据库存储在内存中;任何对数据库进行更改的查询都将保持打开状态,直到在磁盘上执行写入操作。唯一可以避免磁盘成为瓶颈的东西是带有写缓存的磁盘控制器。
我将从默认值的以下更改开始:
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
Run Code Online (Sandbox Code Playgroud)
然后我会看看事情的进展,并根据(除其他外)上述工具的输出尝试不同的事情。我还会确保使用监控工具(例如Munin或Cacti )绘制趋势图,以查看我实际处理的工作负载类型。就个人而言,我对 Munin 提供的 MySQL 插件有丰富的经验。
恕我直言,你应该可以去
innodb_buffer_pool_size=5G
Run Code Online (Sandbox Code Playgroud)
这将是 62.5% 的 RAM,其中有足够的 RAM 用于服务器操作系统以及用于数据库连接的内存
@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
Run Code Online (Sandbox Code Playgroud)
日志文件大小必须是 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 RAM 的数据库服务器。没有办法有48G的日志文件。我 simlpy 使用 innodb 日志文件的最大文件大小,2047M。@Kvisle 对我的回答的评论只是提供了一个链接,说明您不必将自己限制为两个日志文件。如果你有 N 个日志文件,它们总不能达到 4G。我的 25% 规则只是在一个完美的世界中(8GB 或更少的数据库服务器)。
| 归档时间: |
|
| 查看次数: |
63323 次 |
| 最近记录: |