1. 04 Nov, 2011 5 commits
  2. 03 Nov, 2011 12 commits
  3. 02 Nov, 2011 11 commits
    • Tom Lane's avatar
      Avoid scanning nulls at the beginning of a btree index scan. · 1a77f8b6
      Tom Lane authored
      If we have an inequality key that constrains the other end of the index,
      it doesn't directly help us in doing the initial positioning ... but it
      does imply a NOT NULL constraint on the index column.  If the index stores
      nulls at this end, we can use the implied NOT NULL condition for initial
      positioning, just as if it had been stated explicitly.  This avoids wasting
      time when there are a lot of nulls in the column.  This is the reverse of
      the examples given in bugs #6278 and #6283, which were about failing to
      stop early when we encounter nulls at the end of the indexscan.
      1a77f8b6
    • Tom Lane's avatar
      Fix btree stop-at-nulls logic properly. · 882368e8
      Tom Lane authored
      As pointed out by Naoya Anzai, my previous try at this was a few bricks
      shy of a load, because I had forgotten that the initial-positioning logic
      might not try to skip over nulls at the end of the index the scan will
      start from.  We ought to fix that, because it represents an unnecessary
      inefficiency, but first let's get the scan-stop logic back to a safe
      state.  With this patch, we preserve the performance benefit requested
      in bug #6278 for the case of scanning forward into NULLs (in a NULLS
      LAST index), but the reverse case of scanning backward across NULLs
      when there's no suitable initial-positioning qual is still inefficient.
      882368e8
    • Simon Riggs's avatar
    • Simon Riggs's avatar
      Reduce checkpoints and WAL traffic on low activity database server · 18fb9d8d
      Simon Riggs authored
      Previously, we skipped a checkpoint if no WAL had been written since
      last checkpoint, though this does not appear in user documentation.
      As of now, we skip a checkpoint until we have written at least one
      enough WAL to switch the next WAL file. This greatly reduces the
      level of activity and number of WAL messages generated by a very
      low activity server. This is safe because the purpose of a checkpoint
      is to act as a starting place for a recovery, in case of crash.
      This patch maintains minimal WAL volume for replay in case of crash,
      thus maintaining very low crash recovery time.
      18fb9d8d
    • Simon Riggs's avatar
      Refactor xlog.c to create src/backend/postmaster/startup.c · 9aceb6ab
      Simon Riggs authored
      Startup process now has its own dedicated file, just like all other
      special/background processes. Reduces role and size of xlog.c
      9aceb6ab
    • Simon Riggs's avatar
      Derive oldestActiveXid at correct time for Hot Standby. · 86e33648
      Simon Riggs authored
      There was a timing window between when oldestActiveXid was derived
      and when it should have been derived that only shows itself under
      heavy load. Move code around to ensure correct timing of derivation.
      No change to StartupSUBTRANS() code, which is where this failed.
      
      Bug report by Chris Redekop
      86e33648
    • Simon Riggs's avatar
      Start Hot Standby faster when initial snapshot is incomplete. · 10b7c686
      Simon Riggs authored
      If the initial snapshot had overflowed then we can start whenever
      the latest snapshot is empty, not overflowed or as we did already,
      start when the xmin on primary was higher than xmax of our starting
      snapshot, which proves we have full snapshot data.
      
      Bug report by Chris Redekop
      10b7c686
    • Simon Riggs's avatar
    • Simon Riggs's avatar
      Fix timing of Startup CLOG and MultiXact during Hot Standby · f8409b39
      Simon Riggs authored
      Patch by me, bug report by Chris Redekop, analysis by Florian Pflug
      f8409b39
    • Robert Haas's avatar
      Initialize myProcLocks queues just once, at postmaster startup. · c2891b46
      Robert Haas authored
      In assert-enabled builds, we assert during the shutdown sequence that
      the queues have been properly emptied, and during process startup that
      we are inheriting empty queues.  In non-assert enabled builds, we just
      save a few cycles.
      c2891b46
    • Tom Lane's avatar
      Preserve Var location information during flatten_join_alias_vars. · 391af9f7
      Tom Lane authored
      This allows us to give correct syntax error pointers when complaining
      about ungrouped variables in a join query with aggregates or GROUP BY.
      It's pretty much irrelevant for the planner's use of the function, though
      perhaps it might aid debugging sometimes.
      391af9f7
  4. 01 Nov, 2011 9 commits
    • Tom Lane's avatar
      Fix race condition with toast table access from a stale syscache entry. · 08e261cb
      Tom Lane authored
      If a tuple in a syscache contains an out-of-line toasted field, and we
      try to fetch that field shortly after some other transaction has committed
      an update or deletion of the tuple, there is a race condition: vacuum
      could come along and remove the toast tuples before we can fetch them.
      This leads to transient failures like "missing chunk number 0 for toast
      value NNNNN in pg_toast_2619", as seen in recent reports from Andrew
      Hammond and Tim Uckun.
      
      The design idea of syscache is that access to stale syscache entries
      should be prevented by relation-level locks, but that fails for at least
      two cases where toasted fields are possible: ANALYZE updates pg_statistic
      rows without locking out sessions that might want to plan queries on the
      same table, and CREATE OR REPLACE FUNCTION updates pg_proc rows without
      any meaningful lock at all.
      
      The least risky fix seems to be an idea that Heikki suggested when we
      were dealing with a related problem back in August: forcibly detoast any
      out-of-line fields before putting a tuple into syscache in the first place.
      This avoids the problem because at the time we fetch the parent tuple from
      the catalog, we should be holding an MVCC snapshot that will prevent
      removal of the toast tuples, even if the parent tuple is outdated
      immediately after we fetch it.  (Note: I'm not convinced that this
      statement holds true at every instant where we could be fetching a syscache
      entry at all, but it does appear to hold true at the times where we could
      fetch an entry that could have a toasted field.  We will need to be a bit
      wary of adding toast tables to low-level catalogs that don't have them
      already.)  An additional benefit is that subsequent uses of the syscache
      entry should be faster, since they won't have to detoast the field.
      
      Back-patch to all supported versions.  The problem is significantly harder
      to reproduce in pre-9.0 releases, because of their willingness to flush
      every entry in a syscache whenever the underlying catalog is vacuumed
      (cf CatalogCacheFlushRelation); but there is still a window for trouble.
      08e261cb
    • Peter Eisentraut's avatar
      Clean up whitespace and indentation in parser and scanner files · 654e1f96
      Peter Eisentraut authored
      These are not touched by pgindent, so clean them up a bit manually.
      654e1f96
    • Simon Riggs's avatar
    • Simon Riggs's avatar
      Have checkpointer send stats once each processing loop. · 3ba18205
      Simon Riggs authored
      Noted by Fujii Masao
      3ba18205
    • Bruce Momjian's avatar
    • Simon Riggs's avatar
      Add new file for checkpointer.c · bf405ba8
      Simon Riggs authored
      bf405ba8
    • Bruce Momjian's avatar
      Allow pg_upgrade to upgrade an old cluster that doesn't have a · a50d860a
      Bruce Momjian authored
      'postgres' database.
      a50d860a
    • Simon Riggs's avatar
      Split work of bgwriter between 2 processes: bgwriter and checkpointer. · 806a2aee
      Simon Riggs authored
      bgwriter is now a much less important process, responsible for page
      cleaning duties only. checkpointer is now responsible for checkpoints
      and so has a key role in shutdown. Later patches will correct doc
      references to the now old idea that bgwriter performs checkpoints.
      Has beneficial effect on performance at high write rates, but mainly
      refactoring to more easily allow changes for power reduction by
      simplifying previously tortuous code around required to allow page
      cleaning and checkpointing to time slice in the same process.
      
      Patch by me, Review by Dickson Guedes
      806a2aee
    • Magnus Hagander's avatar
      589adb86
  5. 31 Oct, 2011 1 commit
    • Tom Lane's avatar
      Stop btree indexscans upon reaching nulls in either direction. · 6980f817
      Tom Lane authored
      The existing scan-direction-sensitive tests were overly complex, and
      failed to stop the scan in cases where it's perfectly legitimate to do so.
      Per bug #6278 from Maksym Boguk.
      
      Back-patch to 8.3, which is as far back as the patch applies easily.
      Doesn't seem worth sweating over a relatively minor performance issue in
      8.2 at this late date.  (But note that this was a performance regression
      from 8.1 and before, so 8.2 is being left as an outlier.)
      6980f817
  6. 30 Oct, 2011 2 commits
    • Tom Lane's avatar
      Support more locale-specific formatting options in cash_out(). · 6743a878
      Tom Lane authored
      The POSIX spec defines locale fields for controlling the ordering of the
      value, sign, and currency symbol in monetary output, but cash_out only
      supported a small subset of these options.  Fully implement p/n_sign_posn,
      p/n_cs_precedes, and p/n_sep_by_space per spec.  Fix up cash_in so that
      it will accept all these format variants.
      
      Also, make sure that thousands_sep is only inserted to the left of the
      decimal point, as required by spec.
      
      Per bug #6144 from Eduard Kracmar and discussion of bug #6277.  This patch
      includes some ideas from Alexander Lakhin's proposed patch, though it is
      very different in detail.
      6743a878
    • Tom Lane's avatar
      Further improvement of make_greater_string. · eb5834d5
      Tom Lane authored
      Make sure that it considers all the possibilities that the old code did,
      instead of trying only one possibility per character position.  To keep the
      runtime in bounds, instead tweak the character incrementers to not try
      every possible multibyte character code.  Remove unnecessary logic to
      restore the old character value on failure.  Additional comment and
      formatting cleanup.
      eb5834d5