在生产中记录SQL查询?

时间:2010-06-04 17:58:07

标签: php sql mysql transaction-log

我是否在生产中记录SQL查询时遇到了两难。

我不知道在PHP中写文件的速度有多慢。可能一些基准可能会给出一些答案,但我想看看你们之前的想法。

什么做或不做这个过程慢?或者它可以依赖什么?

4 个答案:

答案 0 :(得分:3)

大多数数据库都有用于记录查询和慢查询的内置选项,因此您不需要登录PHP。除非遇到问题,否则不应将所有查询都记录在生产中,这是故障排除过程的一部分。您可以而且应该记录缓慢的查询,以便您可以看到可能会减慢生产站点的速度。

如果框架支持它,只有在页面花费一定时间生成时才能记录查询(这就是我所做的)。然后,您将有条件地进行日志记录,并且可能会发现正在运行的查询数量过多。

答案 1 :(得分:1)

您有几个选择:

  • 让您的数据库记录查询
  • 使用静态方法创建一个logger类,该方法使用缓存的文件句柄来写入...这非常快。此外,您可以将此类设置为查看config中的日志变量,以忽略传入的SQL查询或将其记录到文件中。假设您正在使用数据库API,您可以扩展查询功能以包含(可选)日志记录的额外代码行

答案 2 :(得分:0)

嗯,通过点击数据库,磁盘IO的第一件事就是速度慢。最好的答案是你在一些非平凡的情况下尝试它(记住,小n的一切都很快),并询问一些利益相关者,如果性能是可接受的。它可能不是你想要的答案,但它确实是最好的答案。

答案 3 :(得分:0)

对于记录(您没有指定数据库),Postgresql与日志记录有bunch of options。其中,我使用 log_min_duration_statement 来记录运行时间超过N秒的查询。用于分析,无需填写日志文件和干扰性能。我敢打赌,大多数数据库都有类似的东西。