Add hint about replication slots when nearing wraparound

Started by Feike Steenbergenover 8 years ago10 messageshackers
Jump to latest
#1Feike Steenbergen
feikesteenbergen@gmail.com

Hi,

While doing some wraparound debugging, I saw the hint regarding upcoming
wraparound did not include the problem of having a stale replication
slot (which I'm actually using to force wraparound issues).

I remember a few discussions where a stale replication slot was actually
the culprit in these situations.

Something like the attached maybe?

regards,

Feike

Attachments:

0001-Add-hint-about-replication-slots-for-wraparound.patchapplication/octet-stream; name=0001-Add-hint-about-replication-slots-for-wraparound.patchDownload+12-13
#2Robert Haas
robertmhaas@gmail.com
In reply to: Feike Steenbergen (#1)
Re: Add hint about replication slots when nearing wraparound

On Tue, Dec 19, 2017 at 5:27 AM, Feike Steenbergen
<feikesteenbergen@gmail.com> wrote:

While doing some wraparound debugging, I saw the hint regarding upcoming
wraparound did not include the problem of having a stale replication
slot (which I'm actually using to force wraparound issues).

I remember a few discussions where a stale replication slot was actually the
culprit in these situations.

Something like the attached maybe?

+1.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

#3Michael Paquier
michael@paquier.xyz
In reply to: Robert Haas (#2)
Re: Add hint about replication slots when nearing wraparound

On Wed, Dec 20, 2017 at 12:46 AM, Robert Haas <robertmhaas@gmail.com> wrote:

On Tue, Dec 19, 2017 at 5:27 AM, Feike Steenbergen
<feikesteenbergen@gmail.com> wrote:

While doing some wraparound debugging, I saw the hint regarding upcoming
wraparound did not include the problem of having a stale replication
slot (which I'm actually using to force wraparound issues).

I remember a few discussions where a stale replication slot was actually the
culprit in these situations.

Something like the attached maybe?

+1.

+1.

prepare_transaction.sgml has a "Caution" block mentioning that it is
unwise to keep 2PC transactions unfinished for a too-long time as it
interferes with VACUUM. In doc/src/sgml/logicaldecoding.sgml, it would
be nice to add the a similar caution notice about replication slots so
as users can get be warned before a wraparound shows up.
--
Michael

#4Feike Steenbergen
feikesteenbergen@gmail.com
In reply to: Michael Paquier (#3)
Re: Add hint about replication slots when nearing wraparound

On 20 December 2017 at 06:22, Michael Paquier <michael.paquier@gmail.com>
wrote:

prepare_transaction.sgml has a "Caution" block mentioning that it is
unwise to keep 2PC transactions unfinished for a too-long time as it
interferes with VACUUM. In doc/src/sgml/logicaldecoding.sgml, it would
be nice to add the a similar caution notice about replication slots so
as users can get be warned before a wraparound shows up.

Added.

As far as I know the issue only occurs for stale replication slots for
logical decoding
but not for physical replication, is that correct?

Attachments:

0002-Add-hint-about-replication-slots-for-wraparound.patchapplication/octet-stream; name=0002-Add-hint-about-replication-slots-for-wraparound.patchDownload+16-15
#5Michael Paquier
michael@paquier.xyz
In reply to: Feike Steenbergen (#4)
Re: Add hint about replication slots when nearing wraparound

On Wed, Dec 20, 2017 at 10:00 PM, Feike Steenbergen
<feikesteenbergen@gmail.com> wrote:

As far as I know the issue only occurs for stale replication slots for
logical decoding but not for physical replication, is that correct?

Yeah, I recall something similar.

@@ -255,7 +255,9 @@ $ pg_recvlogical -d postgres --slot test --drop-slot
       even when there is no connection using them. This consumes storage
       because neither required WAL nor required rows from the system catalogs
       can be removed by <command>VACUUM</command> as long as they are
required by a replication
-      slot.  So if a slot is no longer required it should be dropped.
+      slot.  In extreme cases this could cause the database to shut
down to prevent
+      transaction ID wraparound (see <xref linkend="vacuum-for-wraparound"/>).
+      So if a slot is no longer required it should be dropped.
      </para>

Don't you want to put that in its own <caution> block? That's rather
important not to miss for administrators.
--
Michael

#6Feike Steenbergen
feikesteenbergen@gmail.com
In reply to: Michael Paquier (#5)
Re: Add hint about replication slots when nearing wraparound

On 21 December 2017 at 05:32, Michael Paquier <michael.paquier@gmail.com> wrote:

Don't you want to put that in its own <caution> block? That's rather
important not to miss for administrators.

I didn't want to add yet another block on that documentation page,
as it already has 2, however it may be good to upgrade the
note to a caution, similar to the prepared transaction caution.

#7Michael Paquier
michael@paquier.xyz
In reply to: Feike Steenbergen (#6)
Re: Add hint about replication slots when nearing wraparound

On Fri, Dec 22, 2017 at 07:55:19AM +0100, Feike Steenbergen wrote:

On 21 December 2017 at 05:32, Michael Paquier <michael.paquier@gmail.com> wrote:

Don't you want to put that in its own <caution> block? That's rather
important not to miss for administrators.

I didn't want to add yet another block on that documentation page,
as it already has 2, however it may be good to upgrade the
note to a caution, similar to the prepared transaction caution.

Yes, I agree with this position.
--
Michael

#8Feike Steenbergen
feikesteenbergen@gmail.com
In reply to: Michael Paquier (#7)
Re: Add hint about replication slots when nearing wraparound

On 23 December 2017 at 11:58, Michael Paquier <michael.paquier@gmail.com> wrote:

On Fri, Dec 22, 2017 at 07:55:19AM +0100, Feike Steenbergen wrote:

On 21 December 2017 at 05:32, Michael Paquier <michael.paquier@gmail.com> wrote:

Don't you want to put that in its own <caution> block? That's rather
important not to miss for administrators.

I didn't want to add yet another block on that documentation page,
as it already has 2, however it may be good to upgrade the
note to a caution, similar to the prepared transaction caution.

Yes, I agree with this position.

Changed the block from a note to a caution,

regards,

Feike

Attachments:

0003-Add-hint-about-replication-slots-for-wraparound.patchapplication/octet-stream; name=0003-Add-hint-about-replication-slots-for-wraparound.patchDownload+18-17
#9Michael Paquier
michael@paquier.xyz
In reply to: Feike Steenbergen (#8)
Re: Add hint about replication slots when nearing wraparound

On Wed, Dec 27, 2017 at 08:47:20AM +0100, Feike Steenbergen wrote:

Changed the block from a note to a caution,

Thanks for the new version.

- "You might also need to commit or roll back old prepared transactions.")));
+ "You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
Would "or TO drop stale replication slots" be more correct English?
        ereport(WARNING,
 		(errmsg("oldest xmin is far in the past"),
-		 errhint("Close open transactions soon to avoid wraparound problems.")));
+		 errhint("Close open transactions soon to avoid wraparound problems. You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));

I am not convinced that you need this bit. autovacuum_freeze_max_age can
be set to lower to even lower values than the default.

Still, those are minor comments, so I am marking this patch as ready for
committer to get more input from higher-ups.
--
Michael

#10Simon Riggs
simon@2ndQuadrant.com
In reply to: Michael Paquier (#9)
Re: Add hint about replication slots when nearing wraparound

On 27 December 2017 at 11:39, Michael Paquier <michael.paquier@gmail.com> wrote:

On Wed, Dec 27, 2017 at 08:47:20AM +0100, Feike Steenbergen wrote:

Changed the block from a note to a caution,

Thanks for the new version.

- "You might also need to commit or roll back old prepared transactions.")));
+ "You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
Would "or TO drop stale replication slots" be more correct English?
ereport(WARNING,
(errmsg("oldest xmin is far in the past"),
-                errhint("Close open transactions soon to avoid wraparound problems.")));
+                errhint("Close open transactions soon to avoid wraparound problems. You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));

I am not convinced that you need this bit. autovacuum_freeze_max_age can
be set to lower to even lower values than the default.

Still, those are minor comments, so I am marking this patch as ready for
committer to get more input from higher-ups.

I left that in for consistency.

Applied, thanks.

--
Simon Riggs http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services