Re: problems with new vacuum (??)

Lists: pgsql-hackers
From: Barry Lind <barry(at)xythos(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: problems with new vacuum (??)
Date: 2002-01-02 00:31:38
Message-ID: 3C3254EA.6060009@xythos.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Over the last two days I have been struggling with running vacuum on a
7.2b4 database that is running in a production environment. This was
essentially the first time I ran vacuum on this database since it was
upgraded to 7.2. This database is characterized by one large table that
has many inserts and deletes, however generally contains zero rows. So
over the course of the last few weeks this table had grown in size to
about 2.5G (or more correctly the corresponding toast table grew that
large).

So the first problem I had was that the vaccum (regular vacuum not full
vacuum) took a very long time on this table (2+ hours). Now I would
expect it to take a while, so that in and of itself isn't a problem.
But while this vacuum was running the rest of the system was performing
very poorly. Opperations that usually are subsecond, where taking
minutes to complete. At first I thought there was some sort of locking
problem, but these opperations did complete, but after a very long time.

In looking at the log files from this time, I noticed that while the
vacuum process was running, there were a lot of the following messages
in the log file:

2001-12-31 22:16:40 [20655] DEBUG: recycled transaction log file
000000010000009A

The interesting thing (at least in my mind) is that these messages were
produced by all of the other postgres processes, not by the vacuum
process. (And by the way what do they mean?)

The second issue I noticed was that the vacuum process later just hung.
Since I didn't think the new vacuum was supposed to hang (since I
thought it tried a best effort and if it couldn't lock something it
would just skip it).

2001-12-31 22:18:04 [19945] NOTICE: --Relation xyf_files--
2001-12-31 22:21:51 [20673] DEBUG: recycled transaction log file
000000010000009C
2001-12-31 22:21:51 [20673] DEBUG: recycled transaction log file
000000010000009D
2001-12-31 22:21:51 [20673] DEBUG: recycled transaction log file
000000010000009B
2001-12-31 22:31:54 [20711] DEBUG: recycled transaction log file
000000010000009F
2001-12-31 22:31:54 [20711] DEBUG: recycled transaction log file
000000010000009E
2002-01-01 07:30:58 [19945] ERROR: Query was cancelled.

It hung until I cancelled the vacuum with a ^c. So then I tried to
rerun the vacuum and it hung in the same spot, this time for 1.5 hours
before I killed it.

Thinking that maybe there was some sort of problem with this table I ran
a vacuum full (after restarting the database to make sure no other
processes would be locking the full vacuum) and it ran to completion.

Now after the full vacuum the the regular vacuum runs almost instantly
with no further problems.

Is there a bug here, I don't know, but I thought it was interesting
enough to post what I just saw.

thanks,
--Barry


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Barry Lind <barry(at)xythos(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 01:07:53
Message-ID: 1135.1009933673@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Barry Lind <barry(at)xythos(dot)com> writes:
> But while this vacuum was running the rest of the system was performing
> very poorly. Opperations that usually are subsecond, where taking
> minutes to complete.

Is this any different from the behavior of 7.1 vacuum? Also, what
platform are you on?

I've noticed on a Linux 2.4 box (RH 7.2, typical commodity-grade PC
hardware) that vacuum, pgbench, or almost any I/O intensive operation
drives interactive performance into the ground. I have not had an
opportunity to try to characterize the problem, but I suspect Linux's
disk I/O scheduler is not bright enough to prioritize interactive
operations.

> 2001-12-31 22:16:40 [20655] DEBUG: recycled transaction log file
> 000000010000009A

> The interesting thing (at least in my mind) is that these messages were
> produced by all of the other postgres processes, not by the vacuum
> process.

No surprise, as they're coming from the checkpoint process(es).

> The second issue I noticed was that the vacuum process later just hung.

You sure you just didn't wait long enough?

There was a deadlock condition found in 7.2b4 recently, but I am not
convinced that it could affect VACUUM. Anyway, if you can replicate
the problem then please attach to the stuck process with gdb and provide
a stack backtrace.

regards, tom lane


From: Barry Lind <barry(at)xythos(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 05:23:44
Message-ID: 3C329960.1010609@xythos.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Tom,

The platform is Redhat 7.0 with a 2.2.19 kernal.

The behavior is different from the 7.1 vacuum, in 7.1, processes would
just hang since they needed to access the table being vacuumed. So they
would hang as long as the vacuum took on a particular table. In 7.2
they proceed, and don't hang, but take a long time. So you could say
that 7.2 is better than 7.1, but my expectations where higher of 7.2. I
was expecting vacuum to be a benign background process that could run in
parallel with other transactions. That doesn't yet seem to be the case.
I will continue to monitor my system and see if this is reproducable.
I will then try to get a backtrace if I find I have a reproducable case.

thanks,
--Barry

Tom Lane wrote:

> Barry Lind <barry(at)xythos(dot)com> writes:
>
>>But while this vacuum was running the rest of the system was performing
>>very poorly. Opperations that usually are subsecond, where taking
>>minutes to complete.
>>
>
> Is this any different from the behavior of 7.1 vacuum? Also, what
> platform are you on?
>
> I've noticed on a Linux 2.4 box (RH 7.2, typical commodity-grade PC
> hardware) that vacuum, pgbench, or almost any I/O intensive operation
> drives interactive performance into the ground. I have not had an
> opportunity to try to characterize the problem, but I suspect Linux's
> disk I/O scheduler is not bright enough to prioritize interactive
> operations.
>
>
>>2001-12-31 22:16:40 [20655] DEBUG: recycled transaction log file
>>000000010000009A
>>
>
>>The interesting thing (at least in my mind) is that these messages were
>>produced by all of the other postgres processes, not by the vacuum
>>process.
>>
>
> No surprise, as they're coming from the checkpoint process(es).
>
>
>>The second issue I noticed was that the vacuum process later just hung.
>>
>
> You sure you just didn't wait long enough?
>
> There was a deadlock condition found in 7.2b4 recently, but I am not
> convinced that it could affect VACUUM. Anyway, if you can replicate
> the problem then please attach to the stuck process with gdb and provide
> a stack backtrace.
>
> regards, tom lane
>
>


From: Andrew McMillan <andrew(at)catalyst(dot)net(dot)nz>
To: Barry Lind <barry(at)xythos(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 08:29:59
Message-ID: 1009960199.1949.2.camel@kant.mcmillan.net.nz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Wed, 2002-01-02 at 13:31, Barry Lind wrote:
> Over the last two days I have been struggling with running vacuum on a
> 7.2b4 database that is running in a production environment. This was
> essentially the first time I ran vacuum on this database since it was
> upgraded to 7.2. This database is characterized by one large table that
> has many inserts and deletes, however generally contains zero rows. So
> over the course of the last few weeks this table had grown in size to
> about 2.5G (or more correctly the corresponding toast table grew that
> large).
>
> So the first problem I had was that the vaccum (regular vacuum not full
> vacuum) took a very long time on this table (2+ hours). Now I would
> expect it to take a while, so that in and of itself isn't a problem.
> But while this vacuum was running the rest of the system was performing
> very poorly. Opperations that usually are subsecond, where taking
> minutes to complete. At first I thought there was some sort of locking
> problem, but these opperations did complete, but after a very long time.

Is it possible that you waited until a point when the work that vacuum
has to do is being undone faster by the new transactions coming
through? This might be complicated by the fact that (from your vague
description) the table is heavily toasted.

Also, as a suggestion, if you can know there are zero records in the
table very often, why not TRUNCATE it at those times? That should be a
_lot_ quicker than vacuuming it!

Cheers,
Andrew.
--
--------------------------------------------------------------------
Andrew @ Catalyst .Net.NZ Ltd, PO Box 11-053, Manners St, Wellington
WEB: http://catalyst.net.nz/ PHYS: Level 2, 150-154 Willis St
DDI: +64(4)916-7201 MOB: +64(21)635-694 OFFICE: +64(4)499-2267
Are you enrolled at http://schoolreunions.co.nz/ yet?


From: Hannu Krosing <hannu(at)tm(dot)ee>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Barry Lind <barry(at)xythos(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 10:55:56
Message-ID: 3C32E73C.888F2274@tm.ee
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Tom Lane wrote:
>
> Barry Lind <barry(at)xythos(dot)com> writes:
> > But while this vacuum was running the rest of the system was performing
> > very poorly. Opperations that usually are subsecond, where taking
> > minutes to complete.
>
> Is this any different from the behavior of 7.1 vacuum? Also, what
> platform are you on?
>
> I've noticed on a Linux 2.4 box (RH 7.2, typical commodity-grade PC
> hardware) that vacuum, pgbench, or almost any I/O intensive operation
> drives interactive performance into the ground.

They drive each other to the ground too ;(

When I tried to run the new vacuum concurrently with a pgbench in hope
to make it perform better for large number of updates (via removing the
need to scan large number of dead tuples) 1 concurrent vacuum was able
to
make 128 pgbench backends more than twice as slow as they were without
vacuum.
And this is an extra slowdown from another 2-3X slowdown due to dead
tuples
(got from comparing speed on VACUUM FULL db and db aftre doing ~10k
pgbench transactions)

> I have not had an
> opportunity to try to characterize the problem, but I suspect Linux's
> disk I/O scheduler is not bright enough to prioritize interactive
> operations.

Have you any ideas how to distinguish between interactive and
non-interactive
disk I/O coming from postgresql backends ?

Can I for example nice the vacuum'ing backend without getting the
"reverse priority" effects ?

> > 2001-12-31 22:16:40 [20655] DEBUG: recycled transaction log file
> > 000000010000009A
>
> > The interesting thing (at least in my mind) is that these messages were
> > produced by all of the other postgres processes, not by the vacuum
> > process.
>
> No surprise, as they're coming from the checkpoint process(es).
>
> > The second issue I noticed was that the vacuum process later just hung.
>
> You sure you just didn't wait long enough?
>
> There was a deadlock condition found in 7.2b4 recently, but I am not
> convinced that it could affect VACUUM. Anyway, if you can replicate
> the problem then please attach to the stuck process with gdb and provide
> a stack backtrace.
>
> regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly


From: "Matthew T(dot) O'Connor" <matthew(at)zeut(dot)net>
To: Barry Lind <barry(at)xythos(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 14:49:58
Message-ID: 200201021442.g02EgZZ25397@neuromancer.ctlno.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Tuesday 01 January 2002 11:23 pm, Barry Lind wrote:
> Tom,
>
> The platform is Redhat 7.0 with a 2.2.19 kernal.

Is this and IDE based system? If so do you have the drives running in DMA
mode?

What are the results of "/sbin/hdparm /dev/hd(?)" (a,b,c,d ... which ever
drive you are running the database on.)

The 2.2 linux kernel defaults to DMA off. You can try to enable dma by
issuing /sbin/hdparm -d1 /dev/hd(?) You can also test the disk speed with
/sbin/hdparm -tT /dev/hd(?).

In my experience enabling this feature can make a huge improvement in I/O
intensive applications. Other options can help also, but I find dma to have
the largest impact. I find linux almost unusable without it.


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Hannu Krosing <hannu(at)tm(dot)ee>
Cc: Barry Lind <barry(at)xythos(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 15:56:40
Message-ID: 4304.1009987000@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Hannu Krosing <hannu(at)tm(dot)ee> writes:
> Have you any ideas how to distinguish between interactive and
> non-interactive disk I/O coming from postgresql backends ?

I don't see how. For one thing, the backend that originally dirtied
a buffer is not necessarily the one that writes it out. Even assuming
that we could assign a useful priority to different I/O requests,
how do we tell the kernel about it? There's no portable API for that
AFAIK.

One thing that would likely help a great deal is to have the WAL files
on a separate disk spindle, but since what I've got is a one-disk
system, I can't test that on this PC.

regards, tom lane


From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Barry Lind <barry(at)xythos(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 18:12:03
Message-ID: 200201021812.g02IC3q09418@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Tom Lane wrote:
> Barry Lind <barry(at)xythos(dot)com> writes:
> > But while this vacuum was running the rest of the system was performing
> > very poorly. Opperations that usually are subsecond, where taking
> > minutes to complete.
>
> Is this any different from the behavior of 7.1 vacuum? Also, what
> platform are you on?
>
> I've noticed on a Linux 2.4 box (RH 7.2, typical commodity-grade PC
> hardware) that vacuum, pgbench, or almost any I/O intensive operation
> drives interactive performance into the ground. I have not had an
> opportunity to try to characterize the problem, but I suspect Linux's
> disk I/O scheduler is not bright enough to prioritize interactive
> operations.

Just as a data point, I have not seen pgbench dramatically affect
performance on BSD/OS. Interactive sessions are just slightly slower
when then need to access the disk.

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026


From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: "Matthew T(dot) O'Connor" <matthew(at)zeut(dot)net>
Cc: Barry Lind <barry(at)xythos(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 18:13:32
Message-ID: 200201021813.g02IDW609895@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

> In my experience enabling this feature can make a huge improvement in I/O
> intensive applications. Other options can help also, but I find dma to have
> the largest impact. I find linux almost unusable without it.

Oh, I should mention my BSD/OS data point is with one SCSI disk, soft
updates and tagged queuing enabled.

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026


From: Don Baccus <dhogaza(at)pacifier(dot)com>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: "Matthew T(dot) O'Connor" <matthew(at)zeut(dot)net>, Barry Lind <barry(at)xythos(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 18:34:35
Message-ID: 3C3352BB.5020008@pacifier.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Bruce Momjian wrote:

>>In my experience enabling this feature can make a huge improvement in I/O
>>intensive applications. Other options can help also, but I find dma to have
>>the largest impact. I find linux almost unusable without it.
>>
>
> Oh, I should mention my BSD/OS data point is with one SCSI disk, soft
> updates and tagged queuing enabled.

If Tom's system is IDE-based and he's not explicitly enabled DMA then
this alone would explain the difference you two are seeing, just as the
poster above is implying. I have one system with an older 15GB disk
that causes a kernel panic if I try to enable DMA, and I see the kind of
system performance issues described by Tom on that system.

On my main server downtown (SCSI) and my normal desktop (two IDE drives
that do work properly with DMA enabled) things run much, much better
when there's a lot of disk I/O going on. These are all Linux systems,
not BSD...

--
Don Baccus
Portland, OR
http://donb.photo.net, http://birdnotes.net, http://openacs.org


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Don Baccus <dhogaza(at)pacifier(dot)com>
Cc: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>, "Matthew T(dot) O'Connor" <matthew(at)zeut(dot)net>, Barry Lind <barry(at)xythos(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 18:40:32
Message-ID: 5435.1009996832@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Don Baccus <dhogaza(at)pacifier(dot)com> writes:
> If Tom's system is IDE-based and he's not explicitly enabled DMA then
> this alone would explain the difference you two are seeing,

It is IDE, but DMA is on:

[root(at)rh1 root]# hdparm -v /dev/hda

/dev/hda:
multcount = 16 (on)
I/O support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 1 (on)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 9729/255/63, sectors = 156301488, start = 0

[root(at)rh1 root]# hdparm -i /dev/hda

/dev/hda:

Model=ST380021A, FwRev=3.10, SerialNo=3HV0CZ2L
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=-66060037, LBA=yes, LBAsects=156301488
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
AdvancedPM=no
Drive Supports : Reserved : ATA-1 ATA-2 ATA-3 ATA-4 ATA-5

This is an out-of-the-box RH 7.2 install (kernel 2.4.7-10) on recent
Dell hardware. If anyone can suggest further tuning of the hdparm
settings, I'm all ears. Don't know a darn thing about disk tuning
for Linux.

regards, tom lane


From: Hannu Krosing <hannu(at)tm(dot)ee>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: problems with new vacuum (??)
Date: 2002-01-02 21:09:14
Message-ID: 3C3376FA.1060102@tm.ee
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Tom Lane wrote:

>Hannu Krosing <hannu(at)tm(dot)ee> writes:
>
>>Have you any ideas how to distinguish between interactive and
>>non-interactive disk I/O coming from postgresql backends ?
>>
>
>I don't see how. For one thing, the backend that originally dirtied
>a buffer is not necessarily the one that writes it out. Even assuming
>that we could assign a useful priority to different I/O requests,
>how do we tell the kernel about it? There's no portable API for that
>AFAIK.
>
>One thing that would likely help a great deal is to have the WAL files
>on a separate disk spindle, but since what I've got is a one-disk
>system, I can't test that on this PC.
>
If you have enough memory you can put WAL files on a RAM disk for testing :)

It is totally to the countrary of their intended use, but could reveal
something
interesting while testing

----------------
Hannu