From: | Benoit Lobréau <benoit(dot)lobreau(at)gmail(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Question sur les restarts points. |
Date: | 2016-02-15 16:19:28 |
Message-ID: | CAPE8EZ6bBtbh3oCD7WpF1_zm5Pqd2pOXy2NJfbooYK60BwS_Fg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour,
J'utilise les fonctionnalités de HotStandby sur PostgreSQL 9.1.
J'ai constaté en faisant des tests que les restarts_points (sur la standby
donc) ne semblent pas se produire quand checkpoint_segments est atteint
mais uniquement quand checkpoint_timeout est atteint. (et qu'il y a eu un
checkpoint sur la primaire).
En regardant dans le code, j'ai trouvé ça dans bgwrite.c:
/*
* Check progress against WAL segments written and
checkpoint_segments.
*
* We compare the current WAL insert location against the
location
* computed before calling CreateCheckPoint. The code in
XLogInsert that
* actually triggers a checkpoint when checkpoint_segments
is exceeded
* compares against RedoRecptr, so this is not completely
accurate.
* However, it's good enough for our purposes, we're only
calculating an
* estimate anyway.
*/
if (!RecoveryInProgress()) ===> cas d'une restauration ou
d'une standby ?
{
recptr = GetInsertRecPtr();
elapsed_xlogs =
(((double) (int32)
(recptr.xlogid - ckpt_start_recptr.xlogid)) * XLogSegsPerFile +
((double) recptr.xrecoff -
(double) ckpt_start_recptr.xrecoff) / XLogSegSize) /
CheckPointSegments;
if (progress < elapsed_xlogs) ===> progress
en volume
{
ckpt_cached_elapsed =
elapsed_xlogs;
return false;
}
}
/*
* Check progress against time elapsed and
checkpoint_timeout.
*/
gettimeofday(&now, NULL);
elapsed_time = ((double) ((pg_time_t) now.tv_sec -
ckpt_start_time) +
now.tv_usec / 1000000.0) / CheckPointTimeout;
if (progress < elapsed_time) ===> progress en temps
{
ckpt_cached_elapsed = elapsed_time;
return false;
}
/* It looks like we're on schedule. */
return true;
J'ai également trouvé un post de Simon Riggs [1] qui dit:
"checkpoint_segments is ignored on standby. "
ça semble confirmer mes observations mais la doc dit [2]: "In standby mode,
a restartpoint is also triggered if checkpoint_segments log segments have
been replayed since last restartpoint and at least one checkpoint record
has been replayed."
Du coup, je ne comprends pas trop. S'agit il d'une erreur dans la doc ?
[2] http://www.postgresql.org/docs/9.1/static/wal-configuration.html
Merci d'avance.
Benoit
From | Date | Subject | |
---|---|---|---|
Next Message | Pierre Chevalier Géologue | 2016-02-16 09:44:26 | Re: Présentation de PostgreSQL 9.5 le 23 février à Toulouse |
Previous Message | Benoit B | 2016-02-10 16:03:43 | Re: Ajouter utilisateur "login linux" |