Is autovacuum too noisy about orphan temp tables?

Started by Heikki Linnakangasabout 17 years ago11 messages
#1Heikki Linnakangas
heikki.linnakangas@enterprisedb.com

While playing around, I got into the situation that I have an "orphaned
temp table" in my database. The log is now slowly filling with these
messages:

LOG: autovacuum: found orphan temp table "pg_temp_2"."foo" in database
"postgres"
LOG: autovacuum: found orphan temp table "pg_temp_2"."foo" in database
"postgres"
...

I remember the discussion when that was put in, but I'm starting to
think that printing that every time autovacuum wakes up, which is once
per minute by default, is too noisy. Also, it doesn't give me any hint
on what I can do to get rid of the message; I had to search the archives
to find out that I can "DROP SCHEMA pg_temp_2".

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Heikki Linnakangas (#1)
Re: Is autovacuum too noisy about orphan temp tables?

Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> writes:

LOG: autovacuum: found orphan temp table "pg_temp_2"."foo" in database
"postgres"

I remember the discussion when that was put in, but I'm starting to
think that printing that every time autovacuum wakes up, which is once
per minute by default, is too noisy.

What else would you do? I can't see adding state to remember when we
printed it last.

Also, it doesn't give me any hint
on what I can do to get rid of the message; I had to search the archives
to find out that I can "DROP SCHEMA pg_temp_2".

We could surely add an errhint() to the message.

regards, tom lane

#3ITAGAKI Takahiro
itagaki.takahiro@oss.ntt.co.jp
In reply to: Tom Lane (#2)
Re: Is autovacuum too noisy about orphan temp tables?

Tom Lane <tgl@sss.pgh.pa.us> wrote:

Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> writes:

LOG: autovacuum: found orphan temp table "pg_temp_2"."foo" in database
"postgres"

What else would you do? I can't see adding state to remember when we
printed it last.

Why can't we drop orphan temp tables automatically?

Also, it doesn't give me any hint
on what I can do to get rid of the message; I had to search the archives
to find out that I can "DROP SCHEMA pg_temp_2".

We could surely add an errhint() to the message.

Standard DBAs are blind to LOG level messages. If the message is important,
we should use WARNING level. Monitoring middleware notifies DBAs of
WARNING or higher messages, but discards LOG or lower messages.

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: ITAGAKI Takahiro (#3)
Re: Is autovacuum too noisy about orphan temp tables?

ITAGAKI Takahiro <itagaki.takahiro@oss.ntt.co.jp> writes:

Why can't we drop orphan temp tables automatically?

See prior discussion --- it was deemed too risky. What if there's a bug
in the determination of what's an orphan temp table?

Standard DBAs are blind to LOG level messages.

Indeed, which is why I'm not too concerned about Heikki's complaint.

regards, tom lane

#5Alvaro Herrera
alvherre@commandprompt.com
In reply to: Tom Lane (#4)
Re: Is autovacuum too noisy about orphan temp tables?

Tom Lane wrote:

ITAGAKI Takahiro <itagaki.takahiro@oss.ntt.co.jp> writes:

Standard DBAs are blind to LOG level messages.

Indeed, which is why I'm not too concerned about Heikki's complaint.

Well, if the disk fills up due to excessive LOG entries, they won't be
so blind. I think just adding the HINT is good enough.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

#6Decibel!
decibel@decibel.org
In reply to: Alvaro Herrera (#5)
1 attachment(s)
Re: Is autovacuum too noisy about orphan temp tables?

On Oct 14, 2008, at 4:04 PM, Alvaro Herrera wrote:

Tom Lane wrote:

ITAGAKI Takahiro <itagaki.takahiro@oss.ntt.co.jp> writes:

Standard DBAs are blind to LOG level messages.

Indeed, which is why I'm not too concerned about Heikki's complaint.

Well, if the disk fills up due to excessive LOG entries, they won't be
so blind. I think just adding the HINT is good enough.

Since this is something that's not supposed to happen, making it a
WARNING might be appropriate too...
--
Decibel!, aka Jim C. Nasby, Database Architect decibel@decibel.org
Give your computer some brain candy! www.distributed.net Team #1828

Attachments:

smime.p7sapplication/pkcs7-signature; name=smime.p7sDownload
#7Tom Lane
tgl@sss.pgh.pa.us
In reply to: Decibel! (#6)
Re: Is autovacuum too noisy about orphan temp tables?

Decibel! <decibel@decibel.org> writes:

Since this is something that's not supposed to happen, making it a
WARNING might be appropriate too...

Uh, the complaint was that the message is too noisy, not that it isn't
noisy enough.

regards, tom lane

#8Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#7)
Re: Is autovacuum too noisy about orphan temp tables?

On Wed, Oct 15, 2008 at 11:29 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Decibel! <decibel@decibel.org> writes:

Since this is something that's not supposed to happen, making it a
WARNING might be appropriate too...

Uh, the complaint was that the message is too noisy, not that it isn't
noisy enough.

I think you're confusing the volume of the noise with the frequency of
the noise. Once a minute is too often to spit out a message like this
regardless of the log level, but at least at a higher log level
someone may have a better chance of noticing before the disk fills up.

A much better solution would be to not print the warning every time.
I think the right solution is to do exactly what you rejected
upthread, namely adding some kind of stack to track the last time this
was printed. It doesn't need to be real granular, or real exact.
Don't track each table separately, just add a static integer. If a
particular autovac run sees the problem at least once, increment the
integer and print out warnings for all tables found in that run if
(variable % 60) == 1.

...Robert

#9Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#8)
Re: Is autovacuum too noisy about orphan temp tables?

"Robert Haas" <robertmhaas@gmail.com> writes:

A much better solution would be to not print the warning every time.
I think the right solution is to do exactly what you rejected
upthread, namely adding some kind of stack to track the last time this
was printed.

I really doubt that the problem is worth so much effort. Your handwavy
solution doesn't work, I think, because you are ignoring the problem
that this code is executed in relatively short-lived processes that
aren't all examining the same database. By the time you got to a
solution that did work it'd be pretty complicated.

regards, tom lane

#10Greg Stark
greg.stark@enterprisedb.com
In reply to: Tom Lane (#9)
Re: Is autovacuum too noisy about orphan temp tables?

Can autovacuum just set a flag on the orphaned temp table's pg_class
record indicating it's been determined to be an orphan? Then other
tools could easily list orphaned tables and offer to delete them.

greg

On 15 Oct 2008, at 10:52 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Show quoted text

"Robert Haas" <robertmhaas@gmail.com> writes:

A much better solution would be to not print the warning every time.
I think the right solution is to do exactly what you rejected
upthread, namely adding some kind of stack to track the last time
this
was printed.

I really doubt that the problem is worth so much effort. Your
handwavy
solution doesn't work, I think, because you are ignoring the problem
that this code is executed in relatively short-lived processes that
aren't all examining the same database. By the time you got to a
solution that did work it'd be pretty complicated.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#11Alvaro Herrera
alvherre@commandprompt.com
In reply to: Greg Stark (#10)
Re: Is autovacuum too noisy about orphan temp tables?

Greg Stark escribi�:

Can autovacuum just set a flag on the orphaned temp table's pg_class
record indicating it's been determined to be an orphan? Then other tools
could easily list orphaned tables and offer to delete them.

Add a new column to pg_class just for orphan tables? Sure sounds
overkill.

Maybe a bit in the pgstats entry for the table ...? It still seems like
useless bloat to me.

I wonder if we can find out whether a temp table is orphaned by some
other means (a query against catalogs + list of active backends? It
still needs to know whether the table was created by this backend or a
previous one.)

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support