代码之家  ›  专栏  ›  技术社区  ›  see sharper

Postgres查询断断续续地运行,速度非常慢

  •  0
  • see sharper  · 技术社区  · 6 年前

    我们已经尝试研究了同时发生的服务器条件,例如RAM、CPU和查询负载,但是没有什么明显的问题。这会影响极少数的查询—可能不到1%。确实如此

    我们已经在一台临时服务器上尽可能地复制了相同的环境,并且加载了大量的内容,因此问题不会发生。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Laurenz Albe    6 年前

    很难猜出问题的原因;一种解释是锁。

    你应该使用 auto_explain 调查这个问题。

    postgresql.conf

    # log if somebody has to wait for a lock for more than one second
    log_lock_waits = on
    # log slow statements with their parameters
    log_min_duration_statement = 1000
    # log the plans of slow statements
    shared_preload_libraries = 'auto_explain'
    # configuration for auto_explain
    auto_explain.log_nested_statements = on
    auto_explain.log_min_duration = 1000
    

    然后重新启动PostgreSQL。

    现在,所有超过1秒的语句都将在PostgreSQL日志中转储它们的计划,所以您所要做的就是等待问题再次发生,以便您可以分析它。

    EXPLAIN (ANALYZE, BUFFERS) 如果设置,则输出

    auto_explain.log_buffers = on
    auto_explain.log_analyze = on
    

    这将使日志更有价值,但它会大大减慢处理速度,所以我不愿意在生产系统上这样做。