【问题标题】:Log SQL queries in production?在生产中记录 SQL 查询?
【发布时间】:2011-02-27 22:14:03
【问题描述】:

我在是否也要在生产环境中记录 SQL 查询方面陷入两难境地。

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

什么会使过程变慢或不会变慢?或者它可能取决于什么?

【问题讨论】:

    标签: php sql mysql transaction-log


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      大多数数据库都有用于记录查询和慢速查询的内置选项,因此您不需要通过 PHP 进行记录。除非您遇到问题并且这是故障排除过程的一部分,否则您不应记录生产中的所有查询。您可以并且应该记录慢速查询,以便查看可能导致您的生产站点变慢的原因。

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

      【讨论】:

      • 注意内置的数据库日志,如果不仔细应用可能会降低整体性能
      • 这就是我们在我们的应用程序上所做的。如果它很慢,我们会记录查询并在日志消息中放置一个易于识别的字符串。如果我们想要所有的查询,我们就去 dbas。如果您依赖数据库查询日志,建议在每个查询中放置一个唯一的注释字符串,这样您就可以知道它来自应用程序的哪个位置。这很好,因为我们关心的是出了什么问题,而不是发生的一切。
      • 这就是我们所做的。 MySQL 记录自己的查询,慢日志是分开的。日志是文本文件(不同于用于复制和恢复的二进制事务日志文件)并且可以非常快速地追加到。此外,日志记录在与系统和数据库不同的物理磁盘上完成,从而避免了磁盘争用。
      • +1:事务日志是数据库恢复/恢复的基础
      【解决方案3】:

      你有几个选择:

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

      【讨论】:

        【解决方案4】:

        嗯,第 1 件会很慢的事情是通过访问数据库进行磁盘 IO。最好的答案是让您在一些不平凡的情况下尝试它(记住,对于小 n 来说一切都很快)并询问一些利益相关者是否可以接受性能。这可能不是您想要的答案,但它确实是最好的答案。

        【讨论】:

          猜你喜欢
          • 2017-07-12
          • 1970-01-01
          • 1970-01-01
          • 2011-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-02
          • 1970-01-01
          相关资源
          最近更新 更多