Prepared Xacts and Vacuum question

Поиск
Список
Период
Сортировка
От Satoshi Nagayasu
Тема Prepared Xacts and Vacuum question
Дата
Msg-id fa3bffeb0602190159m3722e249qf219d21bf55285a7@mail.gmail.com
обсуждение исходный текст
Ответы Re: Prepared Xacts and Vacuum question  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: Prepared Xacts and Vacuum question  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-hackers
Hi all,

When I was playing with VACUUM, I found that if I have prepared xacts
on the database A, I can't vacuum full on the database B.

Scenario:
1.) Prepare some transaction on "testdb" database.
2.) Create database "pgbench".
3.) Run "pgbench -i" to load pgbench data on "pgbench" database
4.) Delete all records from "accounts" table.
5.) Do VACUUM FULL on "pgbench" database.
6.) "accounts" table will not be shrinked.
7.) Rollback the prepared xacts on "testdb" database.
8.) Do VACUUM FULL on "pgbench" database.
9.) "accounts" table is shrinked.

For more details, please see the attached file.

According to my investigation, when the transaction is prepared,
PROC->xmin always set from the prepared transaction id,
even if it is another database.

So vacuum can't collect the deleted row between current xid and
prepared transaction's xid, and detect them as "nonremovable rows".

I found this on 8.1.0 and current cvs.

I think the prepared xacts on any database mustn't affect to another database.
Is this bug or spec?

Any comments?

Thanks.
--
NAGAYASU Satoshi <snaga@snaga.org>

Вложения

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

Предыдущее
От: "Marc G. Fournier"
Дата:
Сообщение: Re: Pgfoundry and gborg: shut one down
Следующее
От: "Dave Page"
Дата:
Сообщение: Re: Pgfoundry and gborg: shut one down