MySQL查询时间出现奇怪的峰值

时间:2016-10-24 01:13:04

标签: mysql performance spike

我正在运行带有MySQL(InnoDB)的NodeJS用于游戏服务器(玩家信息,存储数据,东西)。服务器是基于HTTP(S)的,所以没有实时。

我有这些奇怪的尖峰,如下图所示(第一张图是请求/秒,最后一张图是查询/秒)

在响应时间图上,您可以看到紫色的最大响应时间和蓝色的平均响应时间。即使有10-20k峰值,平均值仍然保持在50-100ms,95%的请求也是如此。

我一直在挖掘,发现慢查询并不特别。通常使用savedata(blob为~2kb)或玩家个人资料更新来更新查询,这些更新会像用户名一样进行修改。没有加入或类似的东西。我们谈论的行数少于10万行。

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

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

编辑:事实证明,问题绝不是MySQL性能,而是SQL查询之前的Node.js性能。更多信息:Node.js multer and body-parser sometimes extremely slow

1 个答案:

答案 0 :(得分:1)

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

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

只有7G的RAM和4G只是缓冲池,如果swappiness不为零,你的机器将交换。

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

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