我有一个非常香草的mysql 5.1设置,我正在尝试调整它。我找到了这个handy script
提出了以下建议:
query_cache_limit (> 1M, or use smaller result sets)
query_cache_size (> 16M)
join_buffer_size (> 128.0K, or always use indexes with joins)
table_cache (> 64)
innodb_buffer_pool_size (>= 14G)
在阅读这些意思及其目前设定的内容时,我发现我可以运行“mysqladmin variables”
我目前的价值是:
query_cache_limit | 1048576
query_cache_size | 16777216
join_buffer_size | 131072
innodb_buffer_pool_size | 8388608
我如何读取它们,它们是Kbytes吗?那么是1M,16M,13M还是8M?
我的盒子只有拉姆的4G,而在正常的一天只有几百兆的内存。我应该遵循这些建议并做:
#innodb_buffer_pool_size = 15G
#table_cache = 128
#join_buffer_size = 32M
#query_cache_size = 64M
#query_cache_limit = 2M
我对15G感到困惑,这是一个磁盘空间的东西,而不是一个记忆的东西?如果是这样,建议不是很好吗?
我的盒子应该有更多的内存吗?
更多信息: - 我的数据库大小是34Gigs,我使用所有innodb,我有71个表,其中4个是巨大的,其余的都很小。我一直在考虑将大的那些转移到SOLR并从那里做所有的查询,但是想看看我能用基本的调整做些什么。
感谢 乔尔
答案 0 :(得分:0)
您不应将innodb缓冲池设置为高于可用内存。该脚本可能建议根据表中的记录数和物理大小。 Innodb的性能非常基于内存,如果它能够适应内存中的索引,性能将迅速下降并显着下降。所以将innodb_buffer_pool_size设置为高几乎总是很好的建议。
对于mysql来说,Innodb不是最好的表类型。非常大的表通常具有大量插入,但很少读取和更新(即日志记录)作为MyISAM表更好。 Innodb可以提供非常活跃的表格(插入,更新,删除,选择)。这个建议可能会发生火焰战争,这是一般性建议。
但是那样说,没有脚本会告诉你你的设置应该是什么。它只能做一个最好的客人。最佳设置基于您的数据访问模式。你真的必须阅读所有变量是什么。除了手册外,mysqlperformanceblog.com是学习mysql的绝佳场所。
在mysql中,使用“show variables”和“show status”来查看正在发生的事情。您也可以运行“show innodb status”,但如果您不知道变量是什么,则可能无法理解该输出。