【发布时间】:2020-11-28 07:02:03
【问题描述】:
我们正在尝试通过查看性能洞察来减少 AWS RDS 实例的负载。
洞察力中列出的最上面的 SQL 语句是“commit”:
特别是,commit 语句大部分时间都处于“init”状态:
当按状态查看整体负载时,这个“初始化”状态确实构成了负载的很大一部分:
所以,现在,我们不太确定从这些信息中得出什么结论。
- 首先,我们启用了自动提交。这个“COMMIT”语句是否包含自动提交配置中的自动 COMMIT 语句,还是仅在我们的应用程序执行事务时显式 COMMIT 语句独有?
- 我检查了更多,似乎这种“初始化”状态与数据库将 binlog 刷新到磁盘有关 (https://dev.mysql.com/doc/refman/8.0/en/general-thread-states.html)。这可能是有道理的,因为我们的主人有
sync_binlog=1。但这个猜测是否正确,还是可能涉及更多内容? - 如果是这种情况,我阅读了有关调整 sync_binlog(例如 sync_binlog=0 或 sync_binlog>1)的信息,但在硬件故障的情况下风险更大(https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-2-parameters-related-to-replication/)。对于这一部分,我不清楚在使用一个 master 和一些 read-replicas 扩展 RDS 时什么是好的做法:在 master 上触摸这个设置是一种标准做法,还是我们应该更多地关注减少我们的事务量从应用程序执行?
- 在运行
SHOW FULL PROCESSLIST时,我能够看到这些“COMMIT”语句停留在初始化状态。但是,我想知道是否有办法查看与该 COMMIT 语句相关的查询。否则,我们似乎不得不猜测根本原因是什么交易。
【问题讨论】:
-
是的,当
COMMIT位于列表顶部时,这很烦人。使用慢日志找出第二繁忙的查询是什么。
标签: mysql performance load amazon-rds commit