最近我们在MySQL服务器上遇到严重的性能问题。 应用服务器和数据库服务器是分开的 在数据库服务器端,负载平均值立即上升。 CPU使用率也很高(约200%)。
平均负载:16.91,21.48,30.91
在应用程序结束时,我们手动closures了手动打开的任何地方的数据库连接。 my.cnf也使用以下参数进行configuration:
innodb_buffer_pool_size = 4G query_cache_type = 1 wait_timeout = 1800 key_buffer = 16M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 32 query_cache_limit = 5M query_cache_size = 640M query_cache_type = 1
但仍然没有明显的改善。 服务器使用率仍然非常高。 什么可能会出现configuration错误? 如何保持服务器负载平均正常(或至less接近正常)?
为了解决这个问题,你(或者你的代表)需要收集一些关于你的系统的数据,并用科学方法 (或者你喜欢的一个过程)来分析它。
您可以使用sar,free,iostat,vmstat等系统工具收集数据。
安装监控来收集和跟踪数据1,2
阅读你的日志也经常是有帮助的。
现在您已经了解了系统的运行情况,您可以不问问题,进行试验并分析结果。
我的平均负载非常高。 1
所以,现在我们知道我们正在解决的实际问题是什么,我们有一些方向。 让我们收集一些信息来帮助我们找出解决scheme。
分析您收集的信息。 当服务停止响应时,系统上实际发生了什么? 系统资源的状态是什么?
采取适当的措施进行补救。 希望这是很明显的发生了什么事情,你内存不足,OOM杀手出来玩,你的交换活动太高,你的运行队列太长,你iobound等等。如果不明显,可能不会收集正确的数据 – 你知道该怎么做,回到2。
监视4.做的更改。
这些改变是否解决了这个问题? 好点吗? 情况更糟吗? 有没有区别? 你从哪里出发取决于你的发现。 您可能需要返回2.收集更多相关数据或3.重新分析您拥有的数据或4.因为您确定了一些可能的解决scheme。
logging您的发现和您所做的更改。