1. 11 9月, 2007 3 次提交
  2. 10 9月, 2007 7 次提交
  3. 09 9月, 2007 1 次提交
    • T
      Replace the former method of determining snapshot xmax --- to wit, calling · 6bd4f401
      Tom Lane 提交于
      ReadNewTransactionId from GetSnapshotData --- with a "latestCompletedXid"
      variable that is updated during transaction commit or abort.  Since
      latestCompletedXid is written only in places that had to lock ProcArrayLock
      exclusively anyway, and is read only in places that had to lock ProcArrayLock
      shared anyway, it adds no new locking requirements to the system despite being
      cluster-wide.  Moreover, removing ReadNewTransactionId from snapshot
      acquisition eliminates the need to take both XidGenLock and ProcArrayLock at
      the same time.  Since XidGenLock is sometimes held across I/O this can be a
      significant win.  Some preliminary benchmarking suggested that this patch has
      no effect on average throughput but can significantly improve the worst-case
      transaction times seen in pgbench.  Concept by Florian Pflug, implementation
      by Tom Lane.
      6bd4f401
  4. 08 9月, 2007 4 次提交
    • T
      Don't take ProcArrayLock while exiting a transaction that has no XID; there is · 0a51e707
      Tom Lane 提交于
      no need for serialization against snapshot-taking because the xact doesn't
      affect anyone else's snapshot anyway.  Per discussion.  Also, move various
      info about the interlocking of transactions and snapshots out of code comments
      and into a hopefully-more-cohesive discussion in access/transam/README.
      
      Also, remove a couple of now-obsolete comments about having to force some WAL
      to be written to persuade RecordTransactionCommit to do its thing.
      0a51e707
    • B
    • T
      Improve page split in rtree emulation. Now if splitted result has · 0392ea50
      Teodor Sigaev 提交于
      big misalignement, then it tries to split page basing on distribution
      of boxe's centers.
      
      Per report from  Dolafi, Tom <dolafit@janelia.hhmi.org>
      
       Backpatch is needed, change doesn't affect on-disk storage.
      0392ea50
    • T
      Improvements from Heikki Linnakangas <heikki@enterprisedb.com> · 978de9d0
      Teodor Sigaev 提交于
      - change the alignment requirement of lexemes in TSVector slightly.
      Lexeme strings were always padded to 2-byte aligned length to make sure
      that if there's position array (uint16[]) it has the right alignment.
      The patch changes that so that the padding is not done when there's no
      positions. That makes the storage of tsvectors without positions
      slightly more compact.
      
      - added some #include "miscadmin.h" lines I missed in the earlier when I
      added calls to check_stack_depth().
      
      - Reimplement the send/recv functions, and added a comment
      above them describing the on-wire format. The CRC is now recalculated in
      tsquery as well per previous discussion.
      978de9d0
  5. 07 9月, 2007 5 次提交
    • T
      Improving various checks by Heikki Linnakangas <heikki@enterprisedb.com> · 8983852e
      Teodor Sigaev 提交于
      - add code to check that the query tree is well-formed. It was indeed
        possible to send malformed queries in binary mode, which produced all
        kinds of strange results.
      
      - make the left-field a uint32. There's no reason to
        arbitrarily limit it to 16-bits, and it won't increase the disk/memory
        footprint either now that QueryOperator and QueryOperand are separate
        structs.
      
      - add check_stack_depth() call to all recursive functions I found.
        Some of them might have a natural limit so that you can't force
        arbitrarily deep recursions, but check_stack_depth() is cheap enough
        that seems best to just stick it into anything that might be a problem.
      8983852e
    • T
      Refactoring by Heikki Linnakangas <heikki@enterprisedb.com> with · e5be8998
      Teodor Sigaev 提交于
      small editorization by me
      
      - Brake the QueryItem struct into QueryOperator and QueryOperand.
        Type was really the only common field between them. QueryItem still
        exists, and is used in the TSQuery struct as before, but it's now a
        union of the two. Many other changes fell from that, like separation
        of pushval_asis function into pushValue, pushOperator and pushStop.
      
      - Moved some structs that were for internal use only from header files
        to the right .c-files.
      
      - Moved tsvector parser to a new tsvector_parser.c file. Parser code was
        about half of the size of tsvector.c, it's also used from tsquery.c, and
        it has some data structures of its own, so it seems better to separate
        it. Cleaned up the API so that TSVectorParserState is not accessed from
        outside tsvector_parser.c.
      
      - Separated enumerations (#defines, really) used for QueryItem.type
        field and as return codes from gettoken_query. It was just accidental
        code sharing.
      
      - Removed ParseQueryNode struct used internally by makepol and friends.
        push*-functions now construct QueryItems directly.
      
      - Changed int4 variables to just ints for variables like "i" or "array
        size", where the storage-size was not significant.
      e5be8998
    • T
    • T
      Allow CREATE INDEX CONCURRENTLY to disregard transactions in other · cd1aae58
      Tom Lane 提交于
      databases, per gripe from hubert depesz lubaczewski.  Patch from
      Simon Riggs.
      cd1aae58
    • T
      Make eval_const_expressions() preserve typmod when simplifying something like · f8942f4a
      Tom Lane 提交于
      null::char(3) to a simple Const node.  (It already worked for non-null values,
      but not when we skipped evaluation of a strict coercion function.)  This
      prevents loss of typmod knowledge in situations such as exhibited in bug
      #3598.  Unfortunately there seems no good way to fix that bug in 8.1 and 8.2,
      because they simply don't carry a typmod for a plain Const node.
      
      In passing I made all the other callers of makeNullConst supply "real" typmod
      values too, though I think it probably doesn't matter anywhere else.
      f8942f4a
  6. 06 9月, 2007 4 次提交
    • B
      Done: · 190df8a4
      Bruce Momjian 提交于
      < * Reduce XID consumption of read-only queries
      <
      <    http://archives.postgresql.org/pgsql-hackers/2007-08/msg00516.php
      <
      <
      > * -Reduce XID consumption of read-only queries
      190df8a4
    • T
      Volatile-qualify the ProcArray PGPROC pointer in a bunch of routines · 0ecb4ea7
      Tom Lane 提交于
      that examine fields that could change under them.  This is just to make
      really sure that when we are fetching a value 'only once', that's what
      actually happens.  Possibly this is a bug that should be back-patched,
      but in the absence of solid evidence that it's needed, I won't bother.
      0ecb4ea7
    • T
      Quick hack to make the VXID of a prepared transaction be -1/XID, · 4bf2dfb9
      Tom Lane 提交于
      so that different prepared xacts can be told apart in the pg_locks
      view.  Per suggestion from Florian.
      4bf2dfb9
    • T
      Implement lazy XID allocation: transactions that do not modify any database · 295e6398
      Tom Lane 提交于
      rows will normally never obtain an XID at all.  We already did things this way
      for subtransactions, but this patch extends the concept to top-level
      transactions.  In applications where there are lots of short read-only
      transactions, this should improve performance noticeably; not so much from
      removal of the actual XID-assignments, as from reduction of overhead that's
      driven by the rate of XID consumption.  We add a concept of a "virtual
      transaction ID" so that active transactions can be uniquely identified even
      if they don't have a regular XID.  This is a much lighter-weight concept:
      uniqueness of VXIDs is only guaranteed over the short term, and no on-disk
      record is made about them.
      
      Florian Pflug, with some editorialization by Tom.
      295e6398
  7. 05 9月, 2007 1 次提交
  8. 04 9月, 2007 4 次提交
  9. 03 9月, 2007 5 次提交
  10. 02 9月, 2007 4 次提交
  11. 01 9月, 2007 2 次提交
    • T
      Apply a band-aid fix for the problem that 8.2 and up completely misestimate · 0ee5a398
      Tom Lane 提交于
      the number of rows likely to be produced by a query such as
      	SELECT * FROM t1 LEFT JOIN t2 USING (key) WHERE t2.key IS NULL;
      What this is doing is selecting for t1 rows with no match in t2, and thus
      it may produce a significant number of rows even if the t2.key table column
      contains no nulls at all.  8.2 thinks the table column's null fraction is
      relevant and thus may estimate no rows out, which results in terrible plans
      if there are more joins above this one.  A proper fix for this will involve
      passing much more information about the context of a clause to the selectivity
      estimator functions than we ever have.  There's no time left to write such a
      patch for 8.3, and it wouldn't be back-patchable into 8.2 anyway.  Instead,
      put in an ad-hoc test to defeat the normal table-stats-based estimation when
      an IS NULL test is evaluated at an outer join, and just use a constant
      estimate instead --- I went with 0.5 for lack of a better idea.  This won't
      catch every case but it will catch the typical ways of writing such queries,
      and it seems unlikely to make things worse for other queries.
      0ee5a398
    • B
      Only use SGML indexterm "zone" when we want to get the entire section. · a55eab89
      Bruce Momjian 提交于
      Some alignment cleanups.
      a55eab89