2016-10-24 89 views
0

我正在为游戏服务器(玩家信息,savedata,东西)运行带有MySQL(InnoDB)的NodeJS。服务器是基于HTTP(S)的,因此没有任何实时性。MySQL查询时间奇怪的尖峰

我有这些奇怪的尖峰,你可以从下面的图表中看到(第一个图表是请求/秒和最后一个图是查询/秒)

在响应时间图可以看到,最大的响应时间紫色和平均蓝色响应时间。即使那些平均值为10-20k的峰值平均停留在50-100ms,95%的请求也是如此。

我一直在挖掘,发现缓慢的查询是没有什么特别的。通常使用savedata(blob〜2kb)更新查询或修改像用户名等那样的播放器配置文件更新。没有加入或类似的东西。我们正在讨论小于100k行的表格。

服务器在Ubuntu 14.04上使用4核和7GB RAM的MySQL 5.7在Azure上运行。

Server monitor stuff

MySQL的设置:

innodb_buffer_pool_size=4G 
innodb_log_file_size=1G 
innodb_buffer_pool_instances=4 
innodb_log_buffer_size=4M 
query_cache_type=0 
tmp_table_size=64M 
max_heap_table_size=64M 
sort_buffer_size=32M 
wait_timeout=300 
interactive_timeout=300 
innodb_file_per_table=ON 

编辑:原来,这个问题是SQL查询之前从未MySQL的性能,但Node.js的性能。这里更多的信息:Node.js multer and body-parser sometimes extremely slow

+0

您是否也可以检查磁盘吞吐量?有时磁盘也可能很忙,可能会导致峰值。另外,如果这是写入繁重的系统,可能会有很多事情发生在后台,比如锁等待,死锁等等。这些也可能导致这种行为。 – Aruna

+0

IO方面没有什么奇怪的事情发生。服务器运行的不是后端。 –

+0

是否有任何小时cronjobs使用资源,它看起来像他们在固定的时间间隔?可能logrotation或什么 – verhie

回答

1

检查swappiness(假设是0 mysql的机器最大化RAM使用):

> sysctl -A|grep swap 
vm.swappiness = 0 

只有7G的RAM和4G的只是缓冲池,你的机器会掉,如果swappiness是不是零。

你可以发布你的交换图和使用过的内存。 4G缓冲器对于7G RAM是“超越边缘”。对于8G RAM,我会给3G,因为你在操作系统上的所有其他mysql wise + 2G上都有+ 1G。

另外你还有1G的事务日志文件,我假设你有两个日志文件。你有这么多的写入有这么大的文件吗?您可以使用本指南:https://www.percona.com/blog/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/

+0

它被设置为60,将其更改为0.将查看它是如何影响的。 –

+0

我以默认配置开始并尝试使用大量这些指南对其进行优化。一个说日志应该是缓冲区大小的25%,所以我用1G去了。 –

+0

我已经从5.5 - > 5.7升级了MySQL,并且将虚拟机升级到了具有14GB RAM的更快的CPU。我目前使用旧的conf(4G缓冲区即使双RAM)运行服务器。 Swappiness现在为0,“可用内存”显示为10G。我们预计在不久的将来至少有100倍的流量,并且我对这台服务器感到恐慌。 –