mysql慢速查询处理

zwghvu4y  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(351)

我有一个 AWS EC2 示例 DUAL-CORE 以及 4 GB Memory . 我已经准备好了 Apache2 HTTP server 跑步 PHP "7.0.30" 以及 MySQL "Ver 14.14 Distrib 5.7.22" .
有各种设备正在发送 GET/POST 请求我的 Http server . 每个post和get请求都使用select和update查询。
现在,大约有200台设备正在攻击我的电脑 Http server 同时击打 SQL queries 一起选择和更新。这些点击包含 JSON 格式。
问题是我的mysql服务器变得太慢了。从select查询收集数据和加载页面需要很长时间。
phpMyAdmin ,我看到许多睡眠进程处于查询状态。我还调整了我的系统的各种参数 SQL server 但没有结果。
其中一个主要的查询是updatequery,它每60秒更新一次表中的长文本数据,同时来自设备,在mysql服务器状态下经过很长一段时间后,我们看到它的进程是空的。
有没有一种方法可以通过使用sql参数来优化它,以保持mysql服务器的速度,即使有1000个带有多个连接的查询来更新具有长文本的表列?
大多数全局变量都具有默认值。我也尝试过改变各种全局变量的值,但没有产生任何结果。
如何减少这种查询处理的缓慢?
p、 s:我认为问题是由于更新查询造成的。我已经调整了select查询,它们看起来很好。但是,对于更新查询,我在phpmyadmin的进程选项卡中看到睡眠时间长达12秒。
我已经添加了有这个问题的图片的链接(在这里,你甚至可以看到13秒的睡眠,都在更新查询中):

以下是用于查询更新操作的粘贴箱:https://pastebin.com/kyunkjmz

n7taea2i

n7taea2i1#

对于json,这是~25kb(如果反斜杠消失的话可能是22kb),每秒插入40次,但每2分钟插入更多。
我想看看 SHOW CREATE TABLE ,但我仍然可以发表一些评论。
在innodb中,这一大行将被“非记录”存储。也就是说,将有一个额外的磁盘命中写入其他地方的大字符串。
压缩json应该将其压缩到7k左右,这可能导致将大字符串内联存储,从而减少一些i/o开销。在客户端进行压缩以帮助减少网络流量。把柱子做成 BLOB ,不是 TEXT .
旋转驱动器每秒可以处理大约100个i/O。
这200台设备每5秒平均需要40次写入才能跟上速度。没关系。
每2分钟有额外的40次写入。这可能会(也可能不会)使i/o量超过磁盘所能处理的量。这可能是您显示的“更新13秒”的直接原因。那张快照是在两分钟后拍摄的?
还是设备不同步?也就是说,帖子是同时出现的,还是分散在2分钟内?
如果每个更新都是一个单独的事务(或者您正在运行 autocommit=ON ),然后还有一个额外的写操作——用于事务完整性。这可以关闭(在速度和安全性之间进行权衡): innodb_flush_log_at_trx_commit = 2 . 如果您不介意冒着1秒数据的风险,这可能是一个简单的解决方案。
table上还有什么事吗?或者只是这些更新?
我希望您使用的是innodb(这正是我上面所说的内容),因为myisam会因为碎片而绊倒自己。
长时间的“睡眠”不是问题;长时间的“更新”是一个问题。
更多
在上有索引 usermac 所以 UPDATE 不必费力地在整个表中查找所需的行。你也许可以把枪放下 id 并添加 PRIMARY KEY(usermac) .
上面的一些注解被关闭了8倍——表中似乎有8个json列,因此是200kb/行。

相关问题