我最近因为内存不足而出现抖动问题。 (我的VPS总共有256M)
我试图用mysqltuner.pl来调优MySQL,并得到以下结果:
--------一般统计---------------------------------------- ----------
[ - ]跳过版本检查MySQLTuner脚本
[确定]当前正在运行支持的MySQL版本5.0.51a-3ubuntu5.4-log
[确定]在64位体系结构上运行
--------存储引擎统计--------------------------------------- ----
[ - ]状态:+存档-BDB -Federated -InnoDB -ISAM -NDBCluster
[ - ] MyISAM表中的数据:114M(表:454)
[!!]碎片表总数:34
- - - - 性能指标 - - - - - - - - - - - - - - - - - - - - ---------
[ - ]上限:40s(570 q [14.250 qps],23 conn,TX:154K,RX:23K)
[ - ]读/写:100%/ 0%
[ - ]总caching:338.0M全局+每个线程2.7M(最多20个线程)
[!!]最大可能的内存使用量:392.9M(已安装RAM的153%)
[确定]慢查询:0%(5/570)
[确定]可用连接的最高使用率:15%(3/20)
关键缓冲区大小/总MyISAM索引:8.0M / 9.4M
关键缓冲区命中率:57.1%(7个caching/ 3个读取)
[确定]查询caching效率:21.9%(7个caching/ 32个select)
[确定]每天查询caching修剪:0
[确定]需要临时表的sorting:0%(0次临时sorting/ 1次sorting)
[确定]磁盘上创build的临时表:0%(磁盘上为0 /总计32)
[确定]线程caching命中率:86%(已创build3个/ 23个连接)
[确定]表caching命中率:26%(128打开/ 484打开)
[确定]打开文件限制:25%(259 / 1K)
[OK]立即获取表锁:100%(492立即/ 492锁)
--------build议----------------------------------------- ------------
一般build议:
运行OPTIMIZE TABLE进行碎片整理以获得更好的性能
MySQL在过去24小时内启动 - 推荐可能不准确
减less您的整体MySQL内存足迹,以保持系统稳定性
variables调整:
*** MySQL的最大内存使用率是危险的高***
***在增加MySQL缓冲区variables之前添加RAM
key_buffer_size(> 9.4M)
但是我对如何获得最大的内存使用量有点困惑? 它似乎是基于key_buffer和max_connections,但还有其他一些事情呢?
my.cnf文件:
key_buffer = 8M max_allowed_packet = 12M thread_stack = 128K thread_cache_size = 8 max_connections = 20 table_cache = 128 tmp_table_size = 256M max_heap_table_size = 256M join_buffer_size = 256K query_cache_limit = 8M query_cache_size = 64M
我一直在试图通读MySQL调优文章,但他们似乎面向已经知道他们在做什么的人! 任何帮助,将不胜感激。 谢谢!
你有一个256M的服务器,但你不能使用所有的 – 记住有一些操作系统开销。 再加上其他人提到的事实,你肯定会在这里摔打。 256M只适用于一个小型的数据库,20个连接与你所configuration的很多。
1)减less你的最大连接数为4(你使用的是20个中的3个)
2)更好地优化你的查询caching; 8M真的很大,总共64M是基于你的命中/梅干很多, 尝试一个4/32组合,看看它是怎么回事。 真的,我认为2/24的组合会适合你。
3)你没有需要临时表的sorting,为什么那里有max_heap_table_size动词? 注释掉,使用默认值
4)你真的有128桌吗? 尝试削减table_cache一半64或48
5)将thread_cache_size减less到4
6)优化这些表以减less碎片
这是一些开始的事情。 看起来你在一个configuration中扔了一堆数字,没有任何实际的分析知道你需要什么,并创造了一个混乱; 如果一切都失败了,请回到默认设置,摆脱自定义设置,重新开始使用一些您可以在Google上find的性能调整指南。 获得SHOW VARIABLES和SHOW STATUS的输出,findbajillion调谐指南中的任何一个,并将实际的实际数字插入它们的公式中,并且会告诉您需要放置在configuration文件中的确切数字。
我不是一个MySQL的大师,我不能用这个信息来诊断问题,但我试图在源代码中search公式。 这里是:
server_buffers + total_per_thread_buffers * max_connections
哪里:
server_buffers = key_buffer_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size + query_cache_size
和:
total_per_thread_buffers = read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size
现在你必须检查每个这些值,并找出哪一个负责这个庞大的数字。 不要相信这个脚本 – 我尝试在我的一个数据库服务器上运行它,并计算出最大内存是物理内存总量的140%,但系统已经运行了多年,没有任何稳定性问题。
祝你好运!
如果我没有记错,MySQL调谐器使用以下公式来估计最大使用量:
read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size
请记住,这不是100%正确的,实际上只是一个估计,因为MySQL中的某些设置没有定义的限制。
您可以开始调整configuration文件中的一些设置并再次运行调谐器,但是如果您没有时间浪费更改my.cnf,重新启动调谐器并运行调谐器,我build议您得到专家的帮助。
使用mysqlcalculator.com软件可以节省您很多时间。