Re: Tests with switch of WAL segment files.

Поиск
Список
Период
Сортировка
От J. Carlos Muro
Тема Re: Tests with switch of WAL segment files.
Дата
Msg-id 992cea4f0907170344w372165c9q96522af763a0bda3@mail.gmail.com
обсуждение исходный текст
Ответ на Tests with switch of WAL segment files.  ("J. Carlos Muro" <murojc@gmail.com>)
Ответы Re: Tests with switch of WAL segment files.  ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>)
Список pgsql-admin
I realized something else, that only happened once.
I recreated the cluster. If I execute "select pg_switch_xlog();" once, then segment file gets almost immediately switched (a new file is created) even though I don't insert new data. If I waite some thime and execute "select pg_switch_xlog();" then segments are almost inmediately switched again, and so on...
If instead I execute "select pg_switch_xlog();" N consecutive times (N > 1), then the segment file is not switched until new inserts arrive... 

I tried to reproduce the case, recreating the cluster, but it didn't happen again. It is very extrange...

Anyone has got some similar experience? BTW, I am running "PostgreSQL 8.3.7 on x86_64-pc-linux-gnu".


2009/7/16 J. Carlos Muro <murojc@gmail.com>
Hi! I am trying to better understand when switch of WAL files takes place. I have executed the next tests while "archive_mode = off":

    $ initdb -D /var/lib/postgresql/8.3/data

    $ du -sk /var/lib/postgresql/8.3/data/base
    13156   base

    $ psql -c "drop table if exists heavytable; create table heavytable as select * from pg_class, pg_description;"
    $ du -sk /var/lib/postgresql/8.3/data/base
    116532  base
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 17:21 000000010000000000000000

    $ psql -t -c "select pg_size_pretty(pg_total_relation_size('heavytable')) as size;"
    97 MB

    $ psql -c "drop table if exists heavytable; create table heavytable as select * from pg_class, pg_description;"
    $ psql -c "drop table if exists heavytable; create table heavytable as select * from pg_class, pg_description;"
    $ psql -c "drop table if exists heavytable; create table heavytable as select * from pg_class, pg_description;"
    $ du -sk /var/lib/postgresql/8.3/data/base
    116588  base
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 17:26 000000010000000000000000

I create many other times the 'heavytable', nothing changed, WAL segment file keeps to be the same, the size of base directory almost didn't change.
I guess that's normal, and I think there is something that I haven't yet reached to understand from all the docs that I have read. I have two questions:

Q1 - Why do I have just one segment file the whole time? I thought PostgreSQL would create at least 3 of them at the beginning... I have "checkpoint_segments = 3".

If I now state a "select pg_switch_xlog();" it returns one label, but if I execute it again N times it will constantly return the same label (while I don't insert data).
I have executed "select pg_switch_xlog();" many times (please see the next log of tests). After that, I realize that PostgreSQL is ready to create the next segment file ONLY whenever I insert new data.

Q2 - After that, I stated a CHECKPOINT, what caused a switch to a new file. I execute CHECKPOINT once again and switch takes place again. But, if I execute CHECKPOINT again and again, from now and on will NOT be any switches. Why? What makes the switch to a new file take place?

Here is the log of tests:

    $ psql -p 5433 --tuples-only webcreds -c "select pg_switch_xlog();"
    0/4EFA80
    $ du -sk /var/lib/postgresql/8.3/data/base
    116684  base
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 18:23 000000010000000000000000

    $ psql -c "drop table if exists heavytable; create table heavytable as select * from pg_class, pg_description;"
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000000
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000001

    $ psql -p 5433 --tuples-only webcreds -c "select pg_switch_xlog();"
    0/100B9D0
    $ psql -p 5433 --tuples-only webcreds -c "select pg_switch_xlog();"
    0/2000000
    $ psql -p 5433 --tuples-only webcreds -c "select pg_switch_xlog();"
    0/2000000
    $ psql -p 5433 --tuples-only webcreds -c "select pg_switch_xlog();"
    0/2000000
    $ psql -c "drop table if exists heavytable; create table heavytable as select * from pg_class, pg_description;"
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000000
    -rw------- 1 postgres postgres  16M 2009-07-16 18:48 000000010000000000000001
    -rw------- 1 postgres postgres  16M 2009-07-16 18:49 000000010000000000000002

    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;" # <== it causes switch
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 18:48 000000010000000000000001
    -rw------- 1 postgres postgres  16M 2009-07-16 18:52 000000010000000000000002
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000003

    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;"  # <== one of these will cause switch
    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;"
    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;"
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 18:48 000000010000000000000002
    -rw------- 1 postgres postgres  16M 2009-07-16 18:52 000000010000000000000003
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000004

    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;"  # <== there won't be any switches from now and on!
    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;"
    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;"
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 18:48 000000010000000000000002
    -rw------- 1 postgres postgres  16M 2009-07-16 18:52 000000010000000000000003
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000004

    $ psql -c "drop table if exists heavytable; create table heavytable as select * from pg_class, pg_description;"
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 18:56 000000010000000000000002
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000003
    -rw------- 1 postgres postgres  16M 2009-07-16 18:48 000000010000000000000004

    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;"
    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;"
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 18:56 000000010000000000000002
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000003
    -rw------- 1 postgres postgres  16M 2009-07-16 18:48 000000010000000000000004

    $ psql -c "drop table if exists heavytable; create table heavytable as select * from pg_class, pg_description;"
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 18:59 000000010000000000000002
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000003
    -rw------- 1 postgres postgres  16M 2009-07-16 18:48 000000010000000000000004

    $ psql -p 5433 --tuples-only webcreds -c "CHECKPOINT;"
    $ ls -lh /var/lib/postgresql/8.3/data/pg_xlog
    -rw------- 1 postgres postgres  16M 2009-07-16 19:00 000000010000000000000002
    -rw------- 1 postgres postgres  16M 2009-07-16 18:45 000000010000000000000003
    -rw------- 1 postgres postgres  16M 2009-07-16 18:48 000000010000000000000004

Thanks in advance!!
J. Carlos Muro

В списке pgsql-admin по дате отправления:

Предыдущее
От: rasa
Дата:
Сообщение: Re: PostgreSQL using 100% CPU
Следующее
От: Andreas Wenk
Дата:
Сообщение: Re: Enhancement - code completion when typing set search_path