我的一位同事刚刚将我们的服务器和数据库迁移到 AWS,从那时起,一些查询就变得非常慢。我们的代码主要是 PHP,我们正在使用 MySQL 数据库。根据我所做的一些研究,问题可能出在以下两个方面之一:
1)Aurora 并未针对较旧的单线程代码进行优化,使用 MySQL RDS 可能会更好?(点击这里参见相关文章)
2)所有索引都需要重建
由于我不知道如何测试或处理这两件事(我是 DB 新手),我希望有人可以帮助我指明正确的方向或对正在发生的事情提出一些建议。
编辑:
如果有帮助的话,这里有一些错误日志的 pastebin:https://pastebin.com/fudCSTux,我试图让该脚本运行,但目前还没有成功。我很乐意粘贴这些变量的值,但其中一些似乎存在安全风险,我必须仔细检查并删除敏感信息。
编辑2:
这里是所有数据库配置信息的 pastebin。
这里是用于解释查询和显示创建表信息的 pastebin。
编辑3:
主服务器是 t2 small。就数据库而言,有一个主服务器、一个读取器和一个写入器。读取器和写入器目前都是 t2 medium、vCPU 2、RAM 4GB,据我所知,没有 SSD/NVME 设备。我正在查看 AWS 控制台services > rds > databases > clicked on instances > configuration > instance class
以评估硬件。
我修改了查询并删除了周围的引号driverId
,但查询仍然很慢。我打算等到今晚流量较低时再进行索引,以防出现崩溃。
答案1
您的查询 - select * from driver_events where driverId = '923' and FROM_UNIXTIME(time, '%m-%d-%Y') = '12-18-2019' order by time desc limit 0,5; - 不需要在 driverID 周围加引号。引号会导致对每一行进行数据类型操作。列 driverID 定义为 INT - 使得引号不再必要。
您的作业查询运行时间太长,因为没有 jobs.time 的索引。建议:ALTER TABLE jobs ADD INDEX idx_jobs_time (time);
减少完成查询所需的时间。查看我的个人资料、网络个人资料,获取可下载的免费实用脚本以提高性能。
答案2
每秒速率 = RPS
针对您的 AWS Aurora 参数组需要考虑的建议
thread_cache_size=32 # from 2 to reduce threads_created
innodb_lru_scan_depth=100 # from 1024 to conserve 90% of CPU cycles used by function
innodb_flushing_avg_loops=5 # from 30 to reduce loop delay
read_rnd_buffer_size=192K # from 512K to reduce handler_read_rnd_next RPS of 12,322
您会发现这些配置变化将显著减少 CPU 繁忙并提高查询完成速度。