Re: pg_resetxlog -m documentation not up to date - Mailing list pgsql-hackers

From Alvaro Herrera
Subject Re: pg_resetxlog -m documentation not up to date
Date
Msg-id 20130627190803.GL3757@eldon.alvh.no-ip.org
Whole thread Raw
In response to pg_resetxlog -m documentation not up to date  (Peter Eisentraut <peter_e@gmx.net>)
List pgsql-hackers
Peter Eisentraut wrote:

> It was introduced in 0ac5ad5134f2769ccbaefec73844f8504c4d6182 "Improve
> concurrency of foreign key locking", but there is also no explanation
> there.  It is apparently needed in pg_upgrade.
> 
> This should be documented, and I think the help line should be changed
> to something like
> 
>   -m XID,XID       set next and oldest multitransaction ID

I have come up with the attached patch.  Does this match your
expectations?  Also, I'm a bit annoyed that there's no easy "append N
zeroes to a number" recipe for multixact members such as there is for
pg_clog and multixact offsets.  Any suggestions on how to improve the
current recommendation?

(Also, I found out that if the last multixact/offsets file is not
exactly 32 pages long, the server will fail to create further mxacts
after following the recipe in docs; IIRC because it looks up the mxact
previous to the next one.)


*** a/doc/src/sgml/ref/pg_resetxlog.sgml
--- b/doc/src/sgml/ref/pg_resetxlog.sgml
***************
*** 27,33 **** PostgreSQL documentation    <arg choice="opt"><option>-o</option> <replaceable
class="parameter">oid</replaceable></arg>   <arg choice="opt"><option>-x</option> <replaceable
class="parameter">xid</replaceable></arg>   <arg choice="opt"><option>-e</option> <replaceable
class="parameter">xid_epoch</replaceable></arg>
!    <arg choice="opt"><option>-m</option> <replaceable class="parameter">mxid</replaceable></arg>    <arg
choice="opt"><option>-O</option><replaceable class="parameter">mxoff</replaceable></arg>    <arg
choice="opt"><option>-l</option><replaceable class="parameter">xlogfile</replaceable></arg>    <arg
choice="plain"><replaceable>datadir</replaceable></arg>
--- 27,33 ----    <arg choice="opt"><option>-o</option> <replaceable class="parameter">oid</replaceable></arg>    <arg
choice="opt"><option>-x</option><replaceable class="parameter">xid</replaceable></arg>    <arg
choice="opt"><option>-e</option><replaceable class="parameter">xid_epoch</replaceable></arg>
 
!    <arg choice="opt"><option>-m</option> <replaceable class="parameter">mxid</replaceable>,<replaceable
class="parameter">mxid</replaceable></arg>   <arg choice="opt"><option>-O</option> <replaceable
class="parameter">mxoff</replaceable></arg>   <arg choice="opt"><option>-l</option> <replaceable
class="parameter">xlogfile</replaceable></arg>   <arg choice="plain"><replaceable>datadir</replaceable></arg>
 
***************
*** 81,87 **** PostgreSQL documentation    <option>-m</>, <option>-O</>,    and <option>-l</>    options allow the next
OID,next transaction ID, next transaction ID's
 
!    epoch, next multitransaction ID, next multitransaction offset, and WAL    starting address values to be set
manually. These are only needed when    <command>pg_resetxlog</command> is unable to determine appropriate values    by
reading<filename>pg_control</>.  Safe values can be determined as
 
--- 81,87 ----    <option>-m</>, <option>-O</>,    and <option>-l</>    options allow the next OID, next transaction
ID,next transaction ID's
 
!    epoch, next and oldest multitransaction ID, next multitransaction offset, and WAL    starting address values to be
setmanually.  These are only needed when    <command>pg_resetxlog</command> is unable to determine appropriate values
by reading <filename>pg_control</>.  Safe values can be determined as
 
***************
*** 104,115 **** PostgreSQL documentation      <listitem>      <para>
!       A safe value for the next multitransaction ID (<option>-m</>)       can be determined by looking for the
numericallylargest       file name in the directory <filename>pg_multixact/offsets</> under the
 
!       data directory, adding one, and then multiplying by 65536.  As above,
!       the file names are in hexadecimal, so the easiest way to do this is to
!       specify the option value in hexadecimal and add four zeroes.      </para>     </listitem> 
--- 104,119 ----      <listitem>      <para>
!       A safe value for the next multitransaction ID (first part of <option>-m</>)       can be determined by looking
forthe numerically largest       file name in the directory <filename>pg_multixact/offsets</> under the
 
!       data directory, adding one, and then multiplying by 65536.
!       Conversely, a safe value for the oldest multitransaction ID (second part of
!       <option>-m</>)
!       can be determined by looking for the numerically smallest
!       file name in the same directory and multiplying by 65536.
!       As above, the file names are in hexadecimal, so the easiest way to do
!       this is to specify the option value in hexadecimal and append four zeroes.      </para>     </listitem> 
***************
*** 118,126 **** PostgreSQL documentation       A safe value for the next multitransaction offset (<option>-O</>)
canbe determined by looking for the numerically largest       file name in the directory
<filename>pg_multixact/members</>under the
 
!       data directory, adding one, and then multiplying by 65536.  As above,
!       the file names are in hexadecimal, so the easiest way to do this is to
!       specify the option value in hexadecimal and add four zeroes.      </para>     </listitem> 
--- 122,130 ----       A safe value for the next multitransaction offset (<option>-O</>)       can be determined by
lookingfor the numerically largest       file name in the directory <filename>pg_multixact/members</> under the
 
!       data directory, adding one, and then multiplying by 52352.  As above,
!       the file names are in hexadecimal.  There is no simple recipe such as
!       the ones above of appending zeroes.      </para>     </listitem> 
*** a/src/bin/pg_resetxlog/pg_resetxlog.c
--- b/src/bin/pg_resetxlog/pg_resetxlog.c
***************
*** 1036,1042 **** usage(void)     printf(_("  -e XIDEPOCH      set next transaction ID epoch\n"));     printf(_("  -f
            force update to be done\n"));     printf(_("  -l XLOGFILE      force minimum WAL starting location for new
transactionlog\n"));
 
!     printf(_("  -m XID,OLDEST    set next multitransaction ID and oldest value\n"));     printf(_("  -n
noupdate, just show extracted control values (for testing)\n"));     printf(_("  -o OID           set next OID\n"));
printf(_("  -O OFFSET        set next multitransaction offset\n"));
 
--- 1036,1042 ----     printf(_("  -e XIDEPOCH      set next transaction ID epoch\n"));     printf(_("  -f
force update to be done\n"));     printf(_("  -l XLOGFILE      force minimum WAL starting location for new transaction
log\n"));
!     printf(_("  -m XID,XID       set next and oldest multitransaction ID\n"));     printf(_("  -n               no
update,just show extracted control values (for testing)\n"));     printf(_("  -o OID           set next OID\n"));
printf(_(" -O OFFSET        set next multitransaction offset\n"));
 

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services



pgsql-hackers by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: Computer VARSIZE_ANY(PTR) during debugging
Next
From: Noah Misch
Date:
Subject: Re: MemoryContextAllocHuge(): selectively bypassing MaxAllocSize