我即将开始开发一个日志系统,以便将来在当前的 PHP 应用程序中实现,以从 MYSQL 数据库中获取负载和使用统计信息。
该统计信息稍后将用于获取有关每秒数据库调用、查询时间等的信息。
当然,这只会在应用程序处于测试阶段时使用,因为它本身肯定会导致一些额外的负载。
然而,我现在最大的疑问是我应该使用 MYSQL 来记录查询,还是使用基于文件的系统。我猜想在使用基于文件的系统处理日志时创建允许从多个位置写入的东西会有点头疼吗?
你会怎么做?
我即将开始开发一个日志系统,以便将来在当前的 PHP 应用程序中实现,以从 MYSQL 数据库中获取负载和使用统计信息。
该统计信息稍后将用于获取有关每秒数据库调用、查询时间等的信息。
当然,这只会在应用程序处于测试阶段时使用,因为它本身肯定会导致一些额外的负载。
然而,我现在最大的疑问是我应该使用 MYSQL 来记录查询,还是使用基于文件的系统。我猜想在使用基于文件的系统处理日志时创建允许从多个位置写入的东西会有点头疼吗?
你会怎么做?
使用常规日志,它将显示客户端活动,包括所有查询:
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
如果您需要关于每个查询花费多长时间的非常详细的统计信息,请使用 long_query_time 为 0(或其他一些足够短的时间)的慢日志:
http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
然后根据需要使用http://www.maatkit.org/分析日志。
如果您只对长期、非实时分析感兴趣,请打开 MySQL 的常规查询日志记录。有大量工具可用于对查询日志(常规查询和慢查询)进行分析,为您提供有关运行时间、返回的平均行数等的信息。似乎正是您正在寻找的。
MySQL 已经内置了日志记录——手册的第 5.2 章描述了这些。您可能会对通用查询日志(所有查询)、二进制查询日志(更改数据的查询)和慢速日志(查询时间过长或不使用索引)感兴趣。
如果您坚持使用自己的解决方案,您将需要编写一个数据库中间层,您的所有 DB 调用都会通过它来处理时间方面的问题。至于你在哪里写它们,如果你在开发中,这并不重要,但使用第二个数据库的想法还不错。您不需要使用完全独立的数据库,只要使用不同的 MySQL 实例(在不同的机器上,或者只是使用不同端口的不同实例)。我会使用第二个 MySQL 实例而不是文件系统——你会得到所有好的 SQL 函数,比如 SUM 和 AVG 来解析你的数据。
如果您在 MySQL 上进行测试,您应该将结果存储在不同的数据库中,例如Postgres
,这样您就不会增加操作的负载。
我同意 macabail,但只补充一点,您可以将它与 cron 作业和一个简单的脚本结合起来,以提取和生成您可能想要的任何统计信息。