Re: Autovacuum help..

Поиск
Список
Период
Сортировка
От Sundar Narayanaswamy
Тема Re: Autovacuum help..
Дата
Msg-id 20060802143609.65281.qmail@web32809.mail.mud.yahoo.com
обсуждение исходный текст
Ответ на Re: Autovacuum help..  (Martijn van Oosterhout <kleptog@svana.org>)
Ответы Re: Autovacuum help..  (Martijn van Oosterhout <kleptog@svana.org>)
Список pgsql-general
> >
> > Thanks again. I am wondering as to why the state changes to "Transaction in
> > idle" when a query is executed. It'll be nice if that happens only when
> > a real change is made (transaction starts) to the database and not when
> > a select query occurs.
>
> This makes no sense. A select query is also a query affected by
> transactions. In the example above, if you're in a transaction started
> three hours ago, a SELECT will be looking at a version of the database
> as it was three hours ago. Also, select queries can change the database
> also. Consider nextval() for example.
>
> The real question is, why are you keeping the transactions open? If
> they don't need to be, just commit them when you go idle and everything
> can be cleaned up normally.
>

I am not keeping transactions open. Anytime an insert/delete/update
is performed, the change is immediately committed (or rolled back).
It is when selects are done that is causing a problem. The flow
may be as below:

insert into table ....;
commit;
<idle> (autovacuum can remove dead rows)

<some time elapses>
delete table ....;
commit;
<idle> (autovacuum can remove dead rows)

select * from ....;
read rows from result set
<Idle in transaction> (autovacuum cannot remove dead rows)
<LONG time elapses>
(autovacuum cannot remove dead rows)
.
.
The last select operation is the one of concern. I was just raising the point
that select by itself (like the one here) probably shouldn't put the
connection in "Idle in transaction" mode.

Since my app does not do a commit (or rollback) after every select (and
selects in my app don't modify the database), the connection is left
in "Idle in transaction" state for several hours until a next
insert/update/delete followed by commit takes it to "idle" state.
And, autovacuum is unable to remove the dead rows until connection goes
to "idle" state.

Perhaps, the solution is that I should modify my app to do a rollback
followed by every select. But that is a little awkward because selects
don't really modify the database in my case.

Thanks for your suggestions,
sundar.






__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

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

Предыдущее
От: "Joshua D. Drake"
Дата:
Сообщение: Re: Best Procedural Language?
Следующее
От: Michael Fuhr
Дата:
Сообщение: Re: prepare, execute & oids