我在 zabbix 仪表板上每隔 5 分钟在我的数据库服务器上看到 5 Kqps。但是在该时间间隔内所有最大查询(删除/选择/插入/更新/替换)的总和为 1300。不确定如何显示最大 5kqps,但所有最大查询的总和为 1300?我的目标是找到哪个特定的 DML(插入/更新/选择/删除)在这里导致高 QPS 并从这里获得一些方向?另一点是要了解除了这些 DML 之外,还有什么其他因素会导致高 QPS,这样我就可以朝着正确的方向前进。我有点困惑,为什么 Max QPS 可能是一些单独的 DML QPS,或者我在这里遗漏了什么?
期间的 IOPS 也显示 1Kops,如果每个查询甚至都在命中磁盘,它不应该接近 5Kops 吗?差距在哪里?
作为 SQL,
show global status like 'com_%'
将向您展示查询类型的细分。任何大量更新、替换、删除都应该表明您不应该使用 MyISAM。鉴于任何时候都有 5kqps
SHOW FULL PROCESSLIST
应该给你一个活动样本。不用担心 IOP,专注于查询并观察由此带来的好处。如果查询包含在主键中,则它们没有理由导致磁盘 IOP。文件系统缓存也被使用,因此这是另一个防止 IOP 的缓冲区。
如果它的 IOPs(硬件不处理它)就是问题考虑转移到 InnoDB。如果您重视数据,请移至 InnoDB。
SHOW GLOBAL STATUS
在试运行之前和之后。然后查看 、 和 中Com_...
的Questions
差异Queries
。诸如此类的事情
Com_insert
会具体告诉你有多少INSERTs
。如果你有 Stored 例程,
Questions
并且Queries
不会相同,差异是由于例程中的一个计数语句;另一个没有。IOPs 可能与 qps 关系不大。
SELECT
如果它正在扫描一个未缓存在 RAM 中的巨大表,则可能会导致数百万次 IOP 。OTOH,一千个简单SELECTs
的缓存所有必要数据的地方可能会导致零 IOP。QPS 不如所有查询的时间总和重要。在上一段中,可以说一个大查询可能比一千个小查询对系统的影响更大。
要找出哪些语句是顽皮的,请使用慢日志。它将捕获 DDL 和 DML。见http://mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog