在zabbix仪表板上间隔5分钟的时间内,我在DB服务器上看到了5 Kqps。但是在这段时间内,所有的最大查询(删除/选择/插入/更新/替换)的总和为1300。不知道为什么最大5kqps显示,但所有的最大值之和是1300?我的目标是找出哪个特定的DML(insert/update/select/delete)在这里造成高QPS,并从这里得到一些方向?另一点是要理解,除了这些DML之外,还有什么能引起高QPS的东西吗?这样我就可以朝正确的方向移动了。我有点困惑,为什么Max QPS可以是一些单独的DML QPS,或者我在这里遗漏了什么?
此外,IOPS在此期间显示了1Kops,如果每个查询都命中磁盘,那么它不应该接近5Kops吗?差距在哪里?
发布于 2021-02-21 01:46:11
测试运行前后的SHOW GLOBAL STATUS。然后看看Com_...、Questions和Queries的不同之处。
像Com_insert这样的东西会告诉您有多少INSERTs。
如果您有存储的例程,Questions和Queries将不一样,差异是由于例程中的一个计数语句;另一个不是。
IOPs与qps的关系可能很小。如果一个SELECT扫描的是一个没有缓存在内存中的巨大表,它可能会导致数百万的IOP。OTOH,一个1000个简单的SELECTs,其中所有必要的数据都被缓存,可能会导致零IOP。
对于所有查询,QPS并不像时间之和那么重要。在上一段中,可以说,一个大查询对系统的影响可能比上千个小查询的影响更大。
若要查找哪些语句是调皮的,请使用慢速日志。它将捕获DDLs和DMLs。请参阅http://mysql.rjweb.org/doc.php/mysql_analysis#slow_查询_和_慢速日志
发布于 2021-02-21 00:39:15
作为SQL,show global status like 'com_%'将显示查询类型的细分。任何大量的更新、替换、删除都应该表明您不应该使用MyISAM。
如果有5kqps,SHOW FULL PROCESSLIST在任何时候都应该给您一个活动示例。
不要担心IOP,专注于查询并观察由此带来的好处。如果查询包含到主键,则没有理由导致磁盘IOP。还使用了文件系统缓存,因此这是另一个阻止IOP的缓冲区。
如果是IOP(硬件不处理),这就是问题所在,请考虑迁移到InnoDB。如果您对数据进行了评估,请移动到InnoDB。
https://dba.stackexchange.com/questions/285693
复制相似问题