我正在尝试确定 MySQL / Web 服务器瓶颈。
我有三台服务器。一台运行 Nginx 的 Web 服务器,一台装有我的 Wordpress DB 的远程 MySQL 服务器,以及另一台存储我们数据的远程 MySQL 服务器。
我试图找到的瓶颈是在存储数据的第二个 MySQL 服务器和 Web 服务器之间。我们有一个页面,上面有三个数据表(三个单独的查询)。如果全部加载,加载速度会非常慢。偶尔我会收到网关超时错误。
我认为查询本身不是问题。从 DataGrip 来看,这三个查询的平均时间为 200-500 毫秒。目前查询尚未编入索引,因为我被告知插件无法利用索引,但我还是可能会尝试一下。
硬件和设置:
我的 MySQL 服务器是 AWS R6G.Large,2 核,16GB RAM,SSD 为 150 IOPS,吞吐量为 128 MB。innodb_page_size 为 32,buffer_pool_size 为 11000M,innodb_buffer_pool_instances 为 10,innodb_log_file_size 为 1G。Web 服务器是 AWS C6G.Xlarge,4 核,8GB RAM,SSD 为 150 IOPS,吞吐量为 128 MB。使用 FPM 和 Opcache。
我尝试过在两台服务器上使用 TOP 进行监控,但说实话,我不确定我是否具备正确利用这些信息的知识。
我真的很想确定是硬件还是软件的问题,如果是硬件问题,有没有办法隔离?如果真的是硬件问题,增加硬件是没有问题的。
我不确定 Stack / ServerFault 是否允许这样做,但我认为如果我在两台服务器上都运行 TOP 的情况下录制屏幕,可能会更容易知道发生了什么。我在公共 Google Drive 上添加了一个视频。视频中有我的 MySQL 服务器(顶部)和 Web 服务器(Nginx,底部)。我所做的是加载页面(视频中的 3 秒标记)并记录结果。视频是 1:05,这是最后一张表出现所花的时间。视频是在我的网站维护时录制的,因此没有其他 IP / 流量可以到达任何一台服务器。
我的谷歌驱动器链接:
https://drive.google.com/drive/folders/1NtdE1Z4875i1Xx2Wy2EXGgknt9yuY1IN?usp=sharing
希望有人可以帮忙。
艾米