Question sur les restarts points.

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 ?

[1]
http://www.postgresql.org/message-id/CA+U5nMKdf7odZzYNnoRkkCZmJpGEy=OQbU9Nan_zva_Rtzi2vw@mail.gmail.com

[2] http://www.postgresql.org/docs/9.1/static/wal-configuration.html

Merci d'avance.

Benoit

Responses

Browse pgsql-fr-generale by date

  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"