Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

analyze.c

Blame
    • Tom Lane's avatar
      80fb2c1f
      Repair memory leakage while ANALYZE-ing complex index expressions. · 80fb2c1f
      Tom Lane authored
      The general design of memory management in Postgres is that intermediate
      results computed by an expression are not freed until the end of the tuple
      cycle.  For expression indexes, ANALYZE has to re-evaluate each expression
      for each of its sample rows, and it wasn't bothering to free intermediate
      results until the end of processing of that index.  This could lead to very
      substantial leakage if the intermediate results were large, as in a recent
      example from Jakub Ouhrabka.  Fix by doing ResetExprContext for each sample
      row.  This necessitates adding a datumCopy step to ensure that the final
      expression value isn't recycled too.  Some quick testing suggests that this
      change adds at worst about 10% to the time needed to analyze a table with
      an expression index; which is annoying, but seems a tolerable price to pay
      to avoid unexpected out-of-memory problems.
      
      Back-patch to all supported branches.
      80fb2c1f
      History
      Repair memory leakage while ANALYZE-ing complex index expressions.
      Tom Lane authored
      The general design of memory management in Postgres is that intermediate
      results computed by an expression are not freed until the end of the tuple
      cycle.  For expression indexes, ANALYZE has to re-evaluate each expression
      for each of its sample rows, and it wasn't bothering to free intermediate
      results until the end of processing of that index.  This could lead to very
      substantial leakage if the intermediate results were large, as in a recent
      example from Jakub Ouhrabka.  Fix by doing ResetExprContext for each sample
      row.  This necessitates adding a datumCopy step to ensure that the final
      expression value isn't recycled too.  Some quick testing suggests that this
      change adds at worst about 10% to the time needed to analyze a table with
      an expression index; which is annoying, but seems a tolerable price to pay
      to avoid unexpected out-of-memory problems.
      
      Back-patch to all supported branches.