PHP每小时获得MySQL查询量

时间:2018-01-27 01:02:23

标签: php mysql performance monitor

短: 有没有办法以有效的方式获取在特定时间内(通过PHP)执行的查询量?

展开: 我目前正在为前端Web应用程序运行API,该应用程序将被大量用户使用。

我使用自己的自定义框架,它使用模型来完成所有数据魔术,并且它们主要执行INSERT和SELECT。模型的一个功能可以对请求执行5到10个查询,而另一个功能可以每个请求执行50个或更多。

目前,我还没有办法检查我是否会杀死"我的服务器每秒执行(例如)500次查询。

当用户数量在第一周内增加到200,500,1000 ......时,我也不会有惊喜,到月底可能会增加10.000。

我想每小时提取一些统计数据,以便我对平均值有所了解,并且在一切都失败之前我可以在性能和效率方面工作。将一些查询合并到一个"更大的"一个或类似的东西。

我读过的帖子建议只在我的代码中保留一个计数器,但这需要更多的查询,只需要一个数字。首选方法是在我的每小时统计信息脚本中添加一个选择器,该脚本返回已为x处理的请求量执行的查询量。

总结。 还有其他方法可以跟踪这个数额吗?

附加即可。我应该担心并担心查询的数量吗?它们都是小型的,只是为了快速执行而没有瓶颈或繁重的计算而且我目前对一切运行的速度非常快感到印象深刻!

额外额外。它位于我们自己的VPS服务器上,因此我可以完全访问,而且我不仅限于"基本"功能或命令或类似的东西。

1 个答案:

答案 0 :(得分:1)

简答:使用slowlog。

完整答案:

在时间段的开始和结束时,执行

SELECT VARIABLE_VALUE AS Questions
     FROM information_schema.GLOBAL_STATUS
    WHERE VARIABLE_NAME = 'Questions';

然后采取差异。

如果时间不准确,也可以获得... WHERE VARIABLE_NAME = 'Uptime'以获得时间(到第二个)

但问题是...... 500个非常快的查询可能不像5个非常慢和复杂的查询那样有问题。我建议经过的时间可能是决定是否杀人的更好指标。

并且......杀死这个过程可能会导致令人费解的情况,其中顽皮的陈述仍然存在于“杀戮”中。状态很长一段时间。 (请参阅SHOW PROCESSLIST。)可能发生的原因是需要撤消语句以保持数据的完整性。一个示例是单个UPDATE语句,它修改了一百万行表的所有行。

如果你在这种情况下杀人,最好让它完成。

在另一个方向,如果你有一个不使用索引但需要进行表扫描的一行UPDATE,那么查询将需要很长时间,并且可能会带来更多负担系统比" 500查询"。治愈'可能会添加INDEX

该怎么办?使用slowlog。将long_query_time设置为较小的值。默认值为10(秒);这几乎是无用的。将其更改为1甚至更小。然后留意慢速日志。我发现这是关注系统失控的最好方法告诉你修复工作的方法。更多讨论:http://mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog

请注意,slowlog中的最佳度量标准既不是查询运行的次数,也不是运行的时间长度,而是两者的乘积。这是pt-query-digest的默认值。对于mysqlslowdump,添加-s t会按顺序对结果进行排序。