]> granicus.if.org Git - postgresql/commitdiff
docs: my third pass over the 9.6 release notes
authorBruce Momjian <bruce@momjian.us>
Wed, 17 Aug 2016 03:04:50 +0000 (23:04 -0400)
committerBruce Momjian <bruce@momjian.us>
Wed, 17 Aug 2016 03:05:05 +0000 (23:05 -0400)
Backpatch-through: 9.6

doc/src/sgml/release-9.6.sgml

index 9003b1f6e4f09a2eff528ce24f1e05010d66bdf0..8d7356e27fcfb2c2886aab90f7691f7282068827 100644 (file)
@@ -401,7 +401,7 @@ This commit is also listed under libpq and psql
        <para>
         Allow <link linkend="GIN"><acronym>GIN</></> index builds to
         make effective use of <xref linkend="guc-maintenance-work-mem">
-        settings larger than 1GB (Robert Abraham, Teodor Sigaev)
+        settings larger than 1 GB (Robert Abraham, Teodor Sigaev)
        </para>
       </listitem>
 
@@ -467,55 +467,130 @@ This commit is also listed under libpq and psql
     </sect4>
 
     <sect4>
-     <title>General Performance</title>
+     <title>Sorting</title>
 
      <itemizedlist>
 
       <listitem>
 <!--
-2016-03-01 [a892234f8] Change the format of the VM fork to add a second bit per
-2016-03-08 [77a1d1e79] Department of second thoughts: remove PD_ALL_FROZEN.
-2016-03-10 [fd31cd265] Don't vacuum all-frozen pages.
-2016-03-11 [7087166a8] pg_upgrade: Convert old visibility map format to new for
-2016-06-17 [ede62e56f] Add VACUUM (DISABLE_PAGE_SKIPPING) for emergencies.
-2016-07-18 [eca0f1db1] Clear all-frozen visibilitymap status when locking tuple
-2016-08-04 [e7caacf73] Fix hard to hit race condition in heapam's tuple locking
+2016-04-08 [071180377] Use quicksort, not replacement selection, for external s
+2016-03-17 [0011c0091] Improve memory management for external sorts.
 -->
        <para>
-        Avoid re-vacuuming pages containing only frozen tuples (Masahiko
-        Sawada, Robert Haas, Andres Freund)
+        Improve sorting performance by using quicksort, not replacement
+        selection sort, when performing external sort steps (Peter
+        Geoghegan)
        </para>
 
        <para>
-        Formerly, anti-wraparound vacuum had to visit every page of
-        a table, even pages where there was nothing to do.  Now, pages
-        containing only already-frozen tuples are identified in the table's
-        visibility map, and can be skipped by vacuum even when doing
-        transaction wraparound prevention.  This should greatly reduce the
-        cost of maintaining large tables containing mostly-unchanged data.
+        The new approach makes better use of the <acronym>CPU</> cache
+        for typical cache sizes and data volumes.  Where necessary,
+        the behavior can be adjusted via the new configuration parameter
+        <xref linkend="guc-replacement-sort-tuples">.
        </para>
+      </listitem>
 
+      <listitem>
+<!--
+2015-10-09 [0e57b4d8b] Speed up text sorts where the same strings occur multipl
+2015-10-20 [5be94a9eb] Be a bit more rigorous about how we cache strcoll and st
+-->
        <para>
-        If necessary, vacuum can be forced to process all-frozen
-        pages using the new <literal>DISABLE_PAGE_SKIPPING</> option.
-        Normally, this should never be needed but it might help in
-        recovering from visibility-map corruption.
+        Speed up text sorts where the same string occurs multiple times
+        (Peter Geoghegan)
        </para>
       </listitem>
 
       <listitem>
 <!--
-2015-12-30 [e84290823] Avoid useless truncation attempts during VACUUM.
+2015-11-06 [a76ef15d9] Add sort support routine for the UUID data type.
+2016-02-03 [b47b4dbf6] Extend sortsupport for text to more opclasses.
+2016-02-17 [f1f5ec1ef] Reuse abbreviated keys in ordered [set] aggregates.
 -->
        <para>
-        Avoid useless heap-truncation attempts during <command>VACUUM</>
-        (Jeff Janes, Tom Lane)
+        Speed up sorting of <type>uuid</>, <type>bytea</>, and
+        <type>char(n)</> fields by using <quote>abbreviated</> keys
+        (Peter Geoghegan)
        </para>
 
        <para>
-        This change avoids taking an exclusive table lock in some cases
-        where no truncation is possible.  The main benefit comes from
-        avoiding unnecessary query cancellations on standby servers.
+        Support for abbreviated keys has also been
+        added to the non-default operator classes <link
+        linkend="indexes-opclass"><literal>text_pattern_ops</></>,
+        <literal>varchar_pattern_ops</>, and
+        <literal>bpchar_pattern_ops</>.  Processing of ordered-set
+        aggregates can also now exploit abbreviated keys.
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
+2015-12-16 [b648b7034] Speed up CREATE INDEX CONCURRENTLY's TID sort.
+-->
+       <para>
+        Speed up <command>CREATE INDEX CONCURRENTLY</> by treating
+        <acronym>TID</>s as 64-bit integers during sorting (Peter
+        Geoghegan)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Locking</title>
+
+     <itemizedlist>
+
+      <listitem>
+<!--
+2015-08-06 [0e141c0fb] Reduce ProcArrayLock contention by removing backends in
+2015-09-03 [4aec49899] Assorted code review for recent ProcArrayLock patch.
+-->
+       <para>
+        Reduce contention for the <literal>ProcArrayLock</> (Amit Kapila,
+        Robert Haas)
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
+2015-12-15 [6150a1b08] Move buffer I/O and content LWLocks out of the main tran
+-->
+       <para>
+        Improve performance by moving buffer content locks into the buffer
+        descriptors (Andres Freund, Simon Riggs)
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
+2016-04-10 [48354581a] Allow Pin/UnpinBuffer to operate in a lockfree manner.
+-->
+       <para>
+        Replace shared-buffer header spinlocks with atomic operations to
+        improve scalability (Alexander Korotkov, Andres Freund)
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
+2016-04-10 [008608b9d] Avoid the use of a separate spinlock to protect a LWLock
+-->
+       <para>
+        Use atomic operations, rather than a spinlock, to protect an
+        <literal>LWLock</>'s wait queue (Andres Freund)
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
+2016-03-23 [44ca4022f] Partition the freelist for shared dynahash tables.
+-->
+       <para>
+        Partition the shared hash table freelist to reduce contention on
+        multi-<acronym>CPU</>-socket servers (Aleksander Alekseev)
        </para>
       </listitem>
 
@@ -531,111 +606,138 @@ This commit is also listed under libpq and psql
 
        <para>
         This change avoids substantial replication delays that sometimes
-        occurre while replaying such operations.
+        occurred while replaying such operations.
        </para>
       </listitem>
 
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Optimizer Statistics</title>
+
+     <itemizedlist>
+
       <listitem>
 <!--
-2016-02-11 [d4c3a156c] Remove GROUP BY columns that are functionally dependent
+2016-04-01 [be4b4dc75] Omit null rows when applying the Haas-Stokes estimator f
+2016-04-01 [3d3bf62f3] Omit null rows when setting the threshold for what's a m
+2016-04-04 [391159e03] Partially revert commit 3d3bf62f30200500637b24fdb7b992a9
 -->
        <para>
-        Avoid computing <literal>GROUP BY</> columns if they are
-        functionally dependent on other columns (David Rowley)
+        Improve <command>ANALYZE</>'s estimates for columns with many nulls
+        (Tomas Vondra, Alex Shulgin)
        </para>
 
        <para>
-        If a <literal>GROUP BY</> clause includes all columns of a
-        non-deferred primary key, as well as other columns of the same
-        table, those other columns are redundant and can be dropped
-        from the grouping.  This saves computation in many common cases.
+        Previously <command>ANALYZE</> tended to underestimate the number
+        of non-<literal>NULL</> distinct values in a column with many
+        <literal>NULL</>s, and was also inaccurate in computing the
+        most-common values.
        </para>
       </listitem>
 
       <listitem>
 <!--
-2016-03-11 [9118d03a8] When appropriate, postpone SELECT output expressions til
-2016-03-25 [d543170f2] Don't split up SRFs when choosing to postpone SELECT out
+2016-04-04 [84f9a35e3] Improve estimate of distinct values in estimate_num_grou
 -->
        <para>
-        When appropriate, postpone evaluation of <command>SELECT</>
-        output expressions until after an <literal>ORDER BY</> sort
-        (Konstantin Knizhnik)
-       </para>
-
-       <para>
-        This change ensures that volatile or expensive functions in the
-        output list are executed in the order suggested by <literal>ORDER
-        BY</>, and that they are not evaluated more times than required
-        when there is a <literal>LIMIT</> clause.  Previously, these
-        properties held if the ordering was performed by an index scan or
-        pre-merge-join sort, but not if it was performed by a top-level
-        sort.
+        Improve planner's estimate of the number of distinct values in
+        a query result (Tomas Vondra)
        </para>
       </listitem>
 
       <listitem>
 <!--
-2016-03-10 [428b1d6b2] Allow to trigger kernel writeback after a configurable n
-2016-04-13 [fa11a09fe] Fix assorted portability issues with using msync() for d
-2016-04-24 [8f91d87d4] Fix documentation & config inconsistencies around 428b1d
-2016-04-26 [72a98a639] Don't open formally non-existent segments in _mdfd_getse
-2016-05-04 [a71248708] Fix transient mdsync() errors of truncated relations due
-2016-02-16 [7975c5e0a] Allow the WAL writer to flush WAL at a reduced rate.
-2016-06-10 [4bc0f165c] Change default of backend_flush_after GUC to 0 (disabled
+2016-04-08 [137805f89] Use Foreign Key relationships to infer multi-column join
+2016-06-07 [77ba61080] Revert "Use Foreign Key relationships to infer multi-col
+2016-06-18 [100340e2d] Restore foreign-key-aware estimation of join relation si
 -->
        <para>
-        Where feasible, trigger kernel writeback after a configurable
-        number of writes, to prevent accumulation of dirty data in kernel
-        disk buffers (Fabien Coelho, Andres Freund)
+        Use foreign key relationships to infer selectivity for join
+        predicates (Tomas Vondra, David Rowley)
        </para>
 
        <para>
-        <productname>PostgreSQL</> writes data to the kernel's disk cache,
-        from where it will be flushed to physical storage in due time.
-        Many operating systems are not smart about managing this and allow
-        large amounts of dirty data to accumulate before deciding to flush
-        it all at once, leading to long delays for new I/O requests.
-        This change attempts to alleviate this problem by explicitly
-        requesting data flushes after a configurable interval.
+        If a table <literal>t</> has a foreign key restriction, say
+        <literal>(a,b) REFERENCES r (x,y)</>, then a <literal>WHERE</>
+        condition such as <literal>t.a = r.x AND t.b = r.y</> cannot
+        select more than one <literal>r</> row per <literal>t</> row.
+        The planner formerly considered <literal>AND</> conditions
+        to be independent and would often drastically misestimate
+        selectivity as a result.  Now it compares the <literal>WHERE</>
+        conditions to applicable foreign key constraints and produces
+        better estimates.
        </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title><command>VACUUM</></title>
 
+     <itemizedlist>
+
+      <listitem>
+<!--
+2016-03-01 [a892234f8] Change the format of the VM fork to add a second bit per
+2016-03-08 [77a1d1e79] Department of second thoughts: remove PD_ALL_FROZEN.
+2016-03-10 [fd31cd265] Don't vacuum all-frozen pages.
+2016-03-11 [7087166a8] pg_upgrade: Convert old visibility map format to new for
+2016-06-17 [ede62e56f] Add VACUUM (DISABLE_PAGE_SKIPPING) for emergencies.
+2016-07-18 [eca0f1db1] Clear all-frozen visibilitymap status when locking tuple
+2016-08-04 [e7caacf73] Fix hard to hit race condition in heapam's tuple locking
+-->
        <para>
-        On Linux, <function>sync_file_range()</> is used for this purpose,
-        and the feature is on by default on Linux because that function has few
-        downsides.  This sync capability is also available on other platforms
-        that have <function>msync()</> or <function>posix_fadvise()</>,
-        but those interfaces have some undesirable side-effects so the
-        feature is disabled by default on non-Linux platforms.
+        Avoid re-vacuuming pages containing only frozen tuples (Masahiko
+        Sawada, Robert Haas, Andres Freund)
        </para>
 
        <para>
-        The new configuration parameters <xref
-        linkend="guc-backend-flush-after">, <xref
-        linkend="guc-bgwriter-flush-after">, <xref
-        linkend="guc-checkpoint-flush-after">, and <xref
-        linkend="guc-wal-writer-flush-after"> control this behavior.
+        Formerly, anti-wraparound vacuum had to visit every page of
+        a table, even pages where there was nothing to do.  Now, pages
+        containing only already-frozen tuples are identified in the table's
+        visibility map, and can be skipped by vacuum even when doing
+        transaction wraparound prevention.  This should greatly reduce the
+        cost of maintaining large tables containing mostly-unchanged data.
+       </para>
+
+       <para>
+        If necessary, vacuum can be forced to process all-frozen
+        pages using the new <literal>DISABLE_PAGE_SKIPPING</> option.
+        Normally, this should never be needed but it might help in
+        recovering from visibility-map corruption.
        </para>
       </listitem>
 
       <listitem>
 <!--
-2016-03-10 [9cd00c457] Checkpoint sorting and balancing.
+2015-12-30 [e84290823] Avoid useless truncation attempts during VACUUM.
 -->
        <para>
-        Perform checkpoint writes in sorted order (Fabien Coelho,
-        Andres Freund)
+        Avoid useless heap-truncation attempts during <command>VACUUM</>
+        (Jeff Janes, Tom Lane)
        </para>
 
        <para>
-        Previously, checkpoints wrote out dirty pages in whatever order
-        they happen to appear in shared buffers, which usually is nearly
-        random.  That performs poorly, especially on rotating media.
-        This change causes checkpoint-driven writes to be done in order
-        by file and block number, and to be balanced across tablespaces.
+        This change avoids taking an exclusive table lock in some cases
+        where no truncation is possible.  The main benefit comes from
+        avoiding unnecessary query cancellations on standby servers.
        </para>
       </listitem>
 
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>General Performance</title>
+
+     <itemizedlist>
+
       <listitem>
 <!--
 2016-04-08 [848ef42bb] Add the "snapshot too old" feature
@@ -666,6 +768,45 @@ This commit is also listed under libpq and psql
 
       <listitem>
 <!--
+2016-02-11 [d4c3a156c] Remove GROUP BY columns that are functionally dependent
+-->
+       <para>
+        Avoid computing <literal>GROUP BY</> columns if they are
+        functionally dependent on other columns (David Rowley)
+       </para>
+
+       <para>
+        If a <literal>GROUP BY</> clause includes all columns of a
+        non-deferred primary key, as well as other columns of the same
+        table, those other columns are redundant and can be dropped
+        from the grouping.  This saves computation in many common cases.
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
+2016-03-11 [9118d03a8] When appropriate, postpone SELECT output expressions til
+2016-03-25 [d543170f2] Don't split up SRFs when choosing to postpone SELECT out
+-->
+       <para>
+        When appropriate, postpone evaluation of <command>SELECT</>
+        output expressions until after an <literal>ORDER BY</> sort
+        (Konstantin Knizhnik)
+       </para>
+
+       <para>
+        This change ensures that volatile or expensive functions in the
+        output list are executed in the order suggested by <literal>ORDER
+        BY</>, and that they are not evaluated more times than required
+        when there is a <literal>LIMIT</> clause.  Previously, these
+        properties held if the ordering was performed by an index scan or
+        pre-merge-join sort, but not if it was performed by a top-level
+        sort.
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
 2016-03-31 [f9aefcb91] Support using index-only scans with partial indexes in m
 -->
        <para>
@@ -687,25 +828,63 @@ This commit is also listed under libpq and psql
 
       <listitem>
 <!--
-2016-04-08 [137805f89] Use Foreign Key relationships to infer multi-column join
-2016-06-07 [77ba61080] Revert "Use Foreign Key relationships to infer multi-col
-2016-06-18 [100340e2d] Restore foreign-key-aware estimation of join relation si
+2016-03-10 [9cd00c457] Checkpoint sorting and balancing.
 -->
        <para>
-        Use foreign key relationships to infer selectivity for join
-        predicates (Tomas Vondra, David Rowley)
+        Perform checkpoint writes in sorted order (Fabien Coelho,
+        Andres Freund)
        </para>
 
        <para>
-        If a table <literal>t</> has a foreign key restriction, say
-        <literal>(a,b) REFERENCES r (x,y)</>, then a <literal>WHERE</>
-        condition such as <literal>t.a = r.x AND t.b = r.y</> cannot
-        select more than one <literal>r</> row per <literal>t</> row.
-        The planner formerly considered <literal>AND</> conditions
-        to be independent and would often drastically misestimate
-        selectivity as a result.  Now it compares the <literal>WHERE</>
-        conditions to applicable foreign key constraints and produces
-        better estimates.
+        Previously, checkpoints wrote out dirty pages in whatever order
+        they happen to appear in shared buffers, which usually is nearly
+        random.  That performs poorly, especially on rotating media.
+        This change causes checkpoint-driven writes to be done in order
+        by file and block number, and to be balanced across tablespaces.
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
+2016-03-10 [428b1d6b2] Allow to trigger kernel writeback after a configurable n
+2016-04-13 [fa11a09fe] Fix assorted portability issues with using msync() for d
+2016-04-24 [8f91d87d4] Fix documentation & config inconsistencies around 428b1d
+2016-04-26 [72a98a639] Don't open formally non-existent segments in _mdfd_getse
+2016-05-04 [a71248708] Fix transient mdsync() errors of truncated relations due
+2016-02-16 [7975c5e0a] Allow the WAL writer to flush WAL at a reduced rate.
+2016-06-10 [4bc0f165c] Change default of backend_flush_after GUC to 0 (disabled
+-->
+       <para>
+        Where feasible, trigger kernel writeback after a configurable
+        number of writes, to prevent accumulation of dirty data in kernel
+        disk buffers (Fabien Coelho, Andres Freund)
+       </para>
+
+       <para>
+        <productname>PostgreSQL</> writes data to the kernel's disk cache,
+        from where it will be flushed to physical storage in due time.
+        Many operating systems are not smart about managing this and allow
+        large amounts of dirty data to accumulate before deciding to flush
+        it all at once, leading to long delays for new I/O requests.
+        This change attempts to alleviate this problem by explicitly
+        requesting data flushes after a configurable interval.
+       </para>
+
+       <para>
+        On Linux, <function>sync_file_range()</> is used for this purpose,
+        and the feature is on by default on Linux because that function has few
+        downsides.  This sync capability is also available on other platforms
+        that have <function>msync()</> or <function>posix_fadvise()</>,
+        but those interfaces have some undesirable side-effects so the
+        feature is disabled by default on non-Linux platforms.
+       </para>
+
+       <para>
+        The new configuration parameters <xref
+        linkend="guc-backend-flush-after">, <xref
+        linkend="guc-bgwriter-flush-after">, <xref
+        linkend="guc-checkpoint-flush-after">, and <xref
+        linkend="guc-wal-writer-flush-after"> control this behavior.
        </para>
       </listitem>
 
@@ -808,35 +987,6 @@ This commit is also listed under libpq and psql
 
       <listitem>
 <!--
-2016-04-01 [be4b4dc75] Omit null rows when applying the Haas-Stokes estimator f
-2016-04-01 [3d3bf62f3] Omit null rows when setting the threshold for what's a m
-2016-04-04 [391159e03] Partially revert commit 3d3bf62f30200500637b24fdb7b992a9
--->
-       <para>
-        Improve <command>ANALYZE</>'s estimates for columns with many nulls
-        (Tomas Vondra, Alex Shulgin)
-       </para>
-
-       <para>
-        Previously <command>ANALYZE</> tended to underestimate the number
-        of non-<literal>NULL</> distinct values in a column with many
-        <literal>NULL</>s, and was also inaccurate in computing the
-        most-common values.
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
-2016-04-04 [84f9a35e3] Improve estimate of distinct values in estimate_num_grou
--->
-       <para>
-        Improve planner's estimate of the number of distinct values in
-        a query result (Tomas Vondra)
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
 2016-04-08 [719c84c1b] Extend relations multiple blocks at a time to improve sc
 -->
        <para>
@@ -851,69 +1001,6 @@ This commit is also listed under libpq and psql
 
       <listitem>
 <!--
-2016-04-08 [071180377] Use quicksort, not replacement selection, for external s
-2016-03-17 [0011c0091] Improve memory management for external sorts.
--->
-       <para>
-        Improve sorting performance by using quicksort, not replacement
-        selection sort, when performing external sort steps (Peter
-        Geoghegan)
-       </para>
-
-       <para>
-        The new approach makes better use of the <acronym>CPU</> cache
-        for typical cache sizes and data volumes.  Where necessary,
-        the behavior can be adjusted via the new configuration parameter
-        <xref linkend="guc-replacement-sort-tuples">.
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
-2015-10-09 [0e57b4d8b] Speed up text sorts where the same strings occur multipl
-2015-10-20 [5be94a9eb] Be a bit more rigorous about how we cache strcoll and st
--->
-       <para>
-        Speed up text sorts where the same string occurs multiple times
-        (Peter Geoghegan)
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
-2015-11-06 [a76ef15d9] Add sort support routine for the UUID data type.
-2016-02-03 [b47b4dbf6] Extend sortsupport for text to more opclasses.
-2016-02-17 [f1f5ec1ef] Reuse abbreviated keys in ordered [set] aggregates.
--->
-       <para>
-        Speed up sorting of <type>uuid</>, <type>bytea</>, and
-        <type>char(n)</> fields by using <quote>abbreviated</> keys
-        (Peter Geoghegan)
-       </para>
-
-       <para>
-        Support for abbreviated keys has also been
-        added to the non-default operator classes <link
-        linkend="indexes-opclass"><literal>text_pattern_ops</></>,
-        <literal>varchar_pattern_ops</>, and
-        <literal>bpchar_pattern_ops</>.  Processing of ordered-set
-        aggregates can also now exploit abbreviated keys.
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
-2015-12-16 [b648b7034] Speed up CREATE INDEX CONCURRENTLY's TID sort.
--->
-       <para>
-        Speed up <command>CREATE INDEX CONCURRENTLY</> by treating
-        <acronym>TID</>s as 64-bit integers during sorting (Peter
-        Geoghegan)
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
 2016-04-08 [5364b357f] Increase maximum number of clog buffers.
 -->
        <para>
@@ -924,57 +1011,6 @@ This commit is also listed under libpq and psql
 
       <listitem>
 <!--
-2015-08-06 [0e141c0fb] Reduce ProcArrayLock contention by removing backends in
-2015-09-03 [4aec49899] Assorted code review for recent ProcArrayLock patch.
--->
-       <para>
-        Reduce contention for the <literal>ProcArrayLock</> (Amit Kapila,
-        Robert Haas)
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
-2015-12-15 [6150a1b08] Move buffer I/O and content LWLocks out of the main tran
--->
-       <para>
-        Improve performance by moving buffer content locks into the buffer
-        descriptors (Andres Freund, Simon Riggs)
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
-2016-04-10 [48354581a] Allow Pin/UnpinBuffer to operate in a lockfree manner.
--->
-       <para>
-        Replace shared-buffer header spinlocks with atomic operations to
-        improve scalability (Alexander Korotkov, Andres Freund)
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
-2016-04-10 [008608b9d] Avoid the use of a separate spinlock to protect a LWLock
--->
-       <para>
-        Use atomic operations, rather than a spinlock, to protect an
-        <literal>LWLock</>'s wait queue (Andres Freund)
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
-2016-03-23 [44ca4022f] Partition the freelist for shared dynahash tables.
--->
-       <para>
-        Partition the shared hash table freelist to reduce contention on
-        multi-<acronym>CPU</>-socket servers (Aleksander Alekseev)
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
 2015-07-05 [6c82d8d1f] Further reduce overhead for passing plpgsql variables to
 -->
        <para>
@@ -1017,6 +1053,21 @@ This commit is also listed under libpq and psql
 
       <listitem>
 <!--
+2016-03-05 [dc7d70ea0] Expose control file data via SQL accessible functions.
+-->
+       <para>
+        Add <link
+        linkend="functions-controldata"><function>pg_control_system()</></>,
+        <function>pg_control_checkpoint()</>,
+        <function>pg_control_recovery()</>, and
+        <function>pg_control_init()</> functions to expose fields of
+        <filename>pg_control</> to <acronym>SQL</> (Joe Conway, Michael
+        Paquier)
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
 2016-02-17 [a5c43b886] Add new system view, pg_config
 -->
        <para>
@@ -1082,21 +1133,6 @@ This commit is also listed under libpq and psql
 
       <listitem>
 <!--
-2016-03-05 [dc7d70ea0] Expose control file data via SQL accessible functions.
--->
-       <para>
-        Add <link
-        linkend="functions-controldata"><function>pg_control_system()</></>,
-        <function>pg_control_checkpoint()</>,
-        <function>pg_control_recovery()</>, and
-        <function>pg_control_init()</> functions to expose fields of
-        <filename>pg_control</> to <acronym>SQL</> (Joe Conway, Michael
-        Paquier)
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
 2016-01-12 [e63bb4549] Add new user fn pg_current_xlog_flush_location()
 -->
        <para>
@@ -1219,18 +1255,18 @@ This commit is also listed under libpq and psql
 
       <listitem>
 <!--
-2016-02-02 [7d17e683f] Add support for systemd service notifications
+2016-03-16 [c6dda1f48] Add idle_in_transaction_session_timeout.
 -->
        <para>
-        Add configure option <option>--with-systemd</> to enable
-        calling <function>sd_notify()</> at server start and stop (Peter
-        Eisentraut)
+        Allow sessions to be terminated automatically if they are in
+        idle-in-transaction state for too long (Vik Fearing)
        </para>
 
        <para>
-        This allows the use of <application>systemd</> service units of
-        type <literal>notify</>, which greatly simplifies the management
-        of <productname>PostgreSQL</> under <application>systemd</>.
+        This behavior is controlled by the new configuration parameter
+        <xref linkend="guc-idle-in-transaction-session-timeout">.  It can
+        be useful to prevent forgotten transactions from holding locks
+        or preventing vacuum cleanup for too long.
        </para>
       </listitem>
 
@@ -1247,18 +1283,18 @@ This commit is also listed under libpq and psql
 
       <listitem>
 <!--
-2016-03-16 [c6dda1f48] Add idle_in_transaction_session_timeout.
+2016-02-02 [7d17e683f] Add support for systemd service notifications
 -->
        <para>
-        Allow sessions to be terminated automatically if they are in
-        idle-in-transaction state for too long (Vik Fearing)
+        Add configure option <option>--with-systemd</> to enable
+        calling <function>sd_notify()</> at server start and stop (Peter
+        Eisentraut)
        </para>
 
        <para>
-        This behavior is controlled by the new configuration parameter
-        <xref linkend="guc-idle-in-transaction-session-timeout">.  It can
-        be useful to prevent forgotten transactions from holding locks
-        or preventing vacuum cleanup for too long.
+        This allows the use of <application>systemd</> service units of
+        type <literal>notify</>, which greatly simplifies the management
+        of <productname>PostgreSQL</> under <application>systemd</>.
        </para>
       </listitem>
 
@@ -1857,6 +1893,30 @@ XXX this is pending backpatch, may need to remove
 
       <listitem>
 <!--
+2016-04-07 [bb140506d] Phrase full text search.
+2016-06-27 [028350f61] Make exact distance match for FTS phrase operator
+2016-06-27 [3dbbd0f02] Do not fallback to AND for FTS phrase operator.
+2016-06-27 [6734a1cac] Change predecence of phrase operator.
+-->
+       <para>
+        Improve full-text search to support searching for phrases, that
+        is, lexemes appearing adjacent to each other in a specific order,
+        or with a specified distance between them (Teodor Sigaev, Oleg
+        Bartunov, Dmitry Ivanov)
+       </para>
+
+       <para>
+        A phrase-search query can be specified in <type>tsquery</>
+        input using the new operators <literal>&lt;-&gt;</> and
+        <literal>&lt;<replaceable>N</>&gt;</literal>.  The former means
+        that the lexemes before and after it must appear adjacent to
+        each other in that order.  The latter means they must be exactly
+        <replaceable>N</> lexemes apart.
+       </para>
+      </listitem>
+
+      <listitem>
+<!--
 2015-12-22 [6efbded6e] Allow omitting one or both boundaries in an array slice
 -->
        <para>
@@ -1917,30 +1977,6 @@ XXX this is pending backpatch, may need to remove
 
       <listitem>
 <!--
-2016-04-07 [bb140506d] Phrase full text search.
-2016-06-27 [028350f61] Make exact distance match for FTS phrase operator
-2016-06-27 [3dbbd0f02] Do not fallback to AND for FTS phrase operator.
-2016-06-27 [6734a1cac] Change predecence of phrase operator.
--->
-       <para>
-        Improve full-text search to support searching for phrases, that
-        is, lexemes appearing adjacent to each other in a specific order,
-        or with a specified distance between them (Teodor Sigaev, Oleg
-        Bartunov, Dmitry Ivanov)
-       </para>
-
-       <para>
-        A phrase-search query can be specified in <type>tsquery</>
-        input using the new operators <literal>&lt;-&gt;</> and
-        <literal>&lt;<replaceable>N</>&gt;</literal>.  The former means
-        that the lexemes before and after it must appear adjacent to
-        each other in that order.  The latter means they must be exactly
-        <replaceable>N</> lexemes apart.
-       </para>
-      </listitem>
-
-      <listitem>
-<!--
 2016-03-04 [d78a7d9c7] Improve support of Hunspell in ispell dictionary.
 2016-03-11 [8829af47e] Fix merge affixes for numeric ones
 2016-03-17 [f4ceed6ce] Improve support of Hunspell