Finding last checkpoint time

Started by Devrim GÜNDÜZover 15 years ago13 messagesgeneral
Jump to latest
#1Devrim GÜNDÜZ
devrim@gunduz.org

Is there a way to find last checkpoint time via SQL command? I know I
can grep xlogs by turning on log_checkpoints, but I'd prefer an SQL
solution.

--
Devrim GÜNDÜZ
PostgreSQL Danışmanı/Consultant, Red Hat Certified Engineer
PostgreSQL RPM Repository: http://yum.pgrpms.org
Community: devrim~PostgreSQL.org, devrim.gunduz~linux.org.tr
http://www.gunduz.org Twitter: http://twitter.com/devrimgunduz

#2Thom Brown
thombrown@gmail.com
In reply to: Devrim GÜNDÜZ (#1)
Re: Finding last checkpoint time

2010/7/20 Devrim GÜNDÜZ <devrim@gunduz.org>:

Is there a way to find last checkpoint time via SQL command? I know I
can grep xlogs by turning on log_checkpoints, but I'd prefer an SQL
solution.

--

Or you can use pg_controldata /path/to/pgdata and look at "Time of
latest checkpoint".

I don't know of any other way, not to say there isn't one.

Thom

#3Greg Smith
gsmith@gregsmith.com
In reply to: Devrim GÜNDÜZ (#1)
Re: Finding last checkpoint time

Devrim GÜNDÜZ wrote:

Is there a way to find last checkpoint time via SQL command? I know I
can grep xlogs by turning on log_checkpoints, but I'd prefer an SQL
solution.

Not directly. Best you can do without linking in new server code is
either import the logs via CVS to get them into a table, or shell out
and look at what comes out of pg_controldata.

There have been two works in progress to improve this situation that
didn't make it through to commit yet.
http://archives.postgresql.org/pgsql-patches/2008-04/msg00079.php tried
to expose just that bit of data and was shot down for a number of
reasons, from accuracy concerns to the UI used. The still pending one
at
http://archives.postgresql.org/message-id/4B959D7A.6010907@joeconway.com
just adds a SQL interface to what comes out of pg_controldata. You
might prefer to use something like that to calling the shell to parse
the output from the utility, if you don't mind adding something new to
the server code.

--
Greg Smith 2ndQuadrant US Baltimore, MD
PostgreSQL Training, Services and Support
greg@2ndQuadrant.com www.2ndQuadrant.us

#4Devrim GÜNDÜZ
devrim@gunduz.org
In reply to: Thom Brown (#2)
Re: Finding last checkpoint time

On Tue, 2010-07-20 at 20:48 +0100, Thom Brown wrote:

Or you can use pg_controldata /path/to/pgdata and look at "Time of
latest checkpoint".

Right. Thanks :)
--
Devrim GÜNDÜZ
PostgreSQL Danışmanı/Consultant, Red Hat Certified Engineer
PostgreSQL RPM Repository: http://yum.pgrpms.org
Community: devrim~PostgreSQL.org, devrim.gunduz~linux.org.tr
http://www.gunduz.org Twitter: http://twitter.com/devrimgunduz

#5Greg Sabino Mullane
greg@turnstep.com
In reply to: Devrim GÜNDÜZ (#4)
Re: Finding last checkpoint time

-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160

Or you can use pg_controldata /path/to/pgdata and look
at "Time of latest checkpoint".

Assuming your system is using English. Otherwise, you'll
have to build a collection of .po strings as we did for
check_postgres.pl. Needless to say, I'd greatly prefer
some other way to grab the information!

- --
Greg Sabino Mullane greg@turnstep.com
PGP Key: 0x14964AC8 201007220933
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8
-----BEGIN PGP SIGNATURE-----

iEYEAREDAAYFAkxISMwACgkQvJuQZxSWSsirbACfa3ujzyTLyzlPbG0QrDUC/0AB
BCYAnRfP0E2CJQM+V0qNzgdsi47OjWKB
=+XW4
-----END PGP SIGNATURE-----

#6Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Greg Sabino Mullane (#5)
Re: Finding last checkpoint time

Excerpts from Greg Sabino Mullane's message of jue jul 22 13:34:25 UTC 2010:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160

Or you can use pg_controldata /path/to/pgdata and look
at "Time of latest checkpoint".

Assuming your system is using English. Otherwise, you'll
have to build a collection of .po strings as we did for
check_postgres.pl. Needless to say, I'd greatly prefer
some other way to grab the information!

Hmm, wouldn't have it been easier to set LC_MESSAGES to C before calling
pg_controldata?

#7Devrim GÜNDÜZ
devrim@gunduz.org
In reply to: Greg Smith (#3)
Re: Finding last checkpoint time

On Tue, 2010-07-20 at 16:15 -0400, Greg Smith wrote:

Devrim GÜNDÜZ wrote:

Is there a way to find last checkpoint time via SQL command? I know I
can grep xlogs by turning on log_checkpoints, but I'd prefer an SQL
solution.

Not directly. Best you can do without linking in new server code is
either import the logs via CVS to get them into a table, or shell out
and look at what comes out of pg_controldata.

There have been two works in progress to improve this situation that
didn't make it through to commit yet.

<snip>

What about adding a column to pg_stat_bgwriter, like "last_checkpoint"
or similar?

Regards,
--
Devrim GÜNDÜZ
PostgreSQL Danışmanı/Consultant, Red Hat Certified Engineer
PostgreSQL RPM Repository: http://yum.pgrpms.org
Community: devrim~PostgreSQL.org, devrim.gunduz~linux.org.tr
http://www.gunduz.org Twitter: http://twitter.com/devrimgunduz

#8Greg Smith
gsmith@gregsmith.com
In reply to: Devrim GÜNDÜZ (#7)
Re: Finding last checkpoint time

Devrim GÜNDÜZ wrote:

What about adding a column to pg_stat_bgwriter, like "last_checkpoint"
or similar?

If you look at the messages I linked to, you'll find that's one of the
ideas that's been proposed and shot down. We even had a patch...

--
Greg Smith 2ndQuadrant US Baltimore, MD
PostgreSQL Training, Services and Support
greg@2ndQuadrant.com www.2ndQuadrant.us

#9Greg Sabino Mullane
greg@turnstep.com
In reply to: Alvaro Herrera (#6)
Re: Finding last checkpoint time

-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160

Hmm, wouldn't have it been easier to set LC_MESSAGES to C before
calling pg_controldata?

To be honest, I can't remember why that wasn't working for me when
I tried it some time ago. I just verified that it *will* work,
however, when I set LANGUAGE (LC_MESSAGES has no effect).

Specifically, LANGUAGE changes the headers of pg_controldata
(but not the actual output, LC_ALL does that). Thanks for the
nudge, I'll get to rewriting some code.

- --
Greg Sabino Mullane greg@turnstep.com
End Point Corporation http://www.endpoint.com/
PGP Key: 0x14964AC8 201007231456
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8
-----BEGIN PGP SIGNATURE-----

iEYEAREDAAYFAkxJ6IgACgkQvJuQZxSWSsi3/QCg8U48WvgzqmN1edj+axXOHQp0
mAYAoNyBBfQ6FQ0yxCRtESpT2bMXa7tT
=vRSD
-----END PGP SIGNATURE-----

#10Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Greg Sabino Mullane (#9)
Re: Finding last checkpoint time

Excerpts from Greg Sabino Mullane's message of vie jul 23 19:08:27 UTC 2010:

Hash: RIPEMD160

Hmm, wouldn't have it been easier to set LC_MESSAGES to C before
calling pg_controldata?

To be honest, I can't remember why that wasn't working for me when
I tried it some time ago. I just verified that it *will* work,
however, when I set LANGUAGE (LC_MESSAGES has no effect).

Hmm, now that you mention it, I think I remember different systems
honoring different env vars. To be safe you probably want to set the
lot of them -- LANGUAGE, LANG, LC_ALL.

Note that LC_MESSAGES has no effect if LC_ALL is set. I think other
vars also override LC_MESSAGES in some systems.

Still, this is way better than a collection of translated strings;
consider a translator fixing a typo, or choosing a different wording, or
a new language being added.

#11Bruce Momjian
bruce@momjian.us
In reply to: Greg Sabino Mullane (#9)
Re: Finding last checkpoint time

Greg Sabino Mullane wrote:
[ There is text before PGP section. ]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160

Hmm, wouldn't have it been easier to set LC_MESSAGES to C before
calling pg_controldata?

To be honest, I can't remember why that wasn't working for me when
I tried it some time ago. I just verified that it *will* work,
however, when I set LANGUAGE (LC_MESSAGES has no effect).

Specifically, LANGUAGE changes the headers of pg_controldata
(but not the actual output, LC_ALL does that). Thanks for the
nudge, I'll get to rewriting some code.

pg_upgrade does this in controldata.c for this exact reason:

/*
* Because we test the pg_resetxlog output strings, it has to be in
* English.
*/
if (getenv("LANG"))
lang = pg_strdup(ctx, getenv("LANG"));
#ifndef WIN32
putenv(pg_strdup(ctx, "LANG=C"));
#else
SetEnvironmentVariableA("LANG", "C");
#endif

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

#12Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#11)
Re: Finding last checkpoint time

Bruce Momjian <bruce@momjian.us> writes:

Greg Sabino Mullane wrote:

Specifically, LANGUAGE changes the headers of pg_controldata
(but not the actual output, LC_ALL does that). Thanks for the
nudge, I'll get to rewriting some code.

pg_upgrade does this in controldata.c for this exact reason:

/*
* Because we test the pg_resetxlog output strings, it has to be in
* English.
*/
if (getenv("LANG"))
lang = pg_strdup(ctx, getenv("LANG"));
#ifndef WIN32
putenv(pg_strdup(ctx, "LANG=C"));
#else
SetEnvironmentVariableA("LANG", "C");
#endif

You do realize that's far from bulletproof? To be sure that that does
anything, you'd need to set (or unset) LC_ALL and LC_MESSAGES as well.
And I thought Windows spelled it LANGUAGE not LANG ...

regards, tom lane

#13Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#12)
Re: Finding last checkpoint time

Tom Lane wrote:

Bruce Momjian <bruce@momjian.us> writes:

Greg Sabino Mullane wrote:

Specifically, LANGUAGE changes the headers of pg_controldata
(but not the actual output, LC_ALL does that). Thanks for the
nudge, I'll get to rewriting some code.

pg_upgrade does this in controldata.c for this exact reason:

/*
* Because we test the pg_resetxlog output strings, it has to be in
* English.
*/
if (getenv("LANG"))
lang = pg_strdup(ctx, getenv("LANG"));
#ifndef WIN32
putenv(pg_strdup(ctx, "LANG=C"));
#else
SetEnvironmentVariableA("LANG", "C");
#endif

You do realize that's far from bulletproof? To be sure that that does
anything, you'd need to set (or unset) LC_ALL and LC_MESSAGES as well.
And I thought Windows spelled it LANGUAGE not LANG ...

Well, this has been tested on Windows in a Japanese environment. I see
test/regress/pg_regress.c does have all the settings you suggest. I
will add them too.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +