Re: Plans for solving the VACUUM problem

Поиск
Список
Период
Сортировка
От Barry Lind
Тема Re: Plans for solving the VACUUM problem
Дата
Msg-id 3B099B7A.5050402@xythos.com
обсуждение исходный текст
Ответ на RE: Plans for solving the VACUUM problem  ("Mikheev, Vadim" <vmikheev@SECTORBASE.COM>)
Список pgsql-hackers

Tom Lane wrote:

> 
> Hm.  On the other hand, relying on WAL for undo means you cannot drop
> old WAL segments that contain records for any open transaction.  We've
> already seen several complaints that the WAL logs grow unmanageably huge
> when there is a long-running transaction, and I think we'll see a lot
> more.
> 
> It would be nicer if we could drop WAL records after a checkpoint or two,
> even in the presence of long-running transactions.  We could do that if
> we were only relying on them for crash recovery and not for UNDO.

In Oracle the REDO and UNDO are separate.  REDO in oracle is limited in 
size to x log files y big (where x and y are parameters at database 
creation).  These x log files are reused in a round robin way with 
checkpoints forced when wrapping around.

REDO in oracle is done by something known as a 'rollback segment'.  
There are many rollback segments.  A transaction is assigned one 
rollback segment to write its UNDO records to.  Transactions are 
assigned to a rollback segment randomly (or you can explicitly assign a 
transaction to a particular rollback segment if you want).  The size of 
rollback segments are limited and transactions are aborted if they 
exceed that size.  This is why oracle has the option to assign a 
specific rollback segment to a transaction, so if you know you are going 
to update/insert tons of stuff you want to use an appropriately sized 
rollback segment for that transaction.

Things I like about the Oracle approach vs current WAL REDO and proposed 
UNDO:

1 Sizes allocated to REDO and UNDO in Oracle are known and 
configurable.  WAL sizes are unknown and not constrained.
2 Oracle allows for big transactions by allowing them to use 
specifically sizied rollback segments to handle the large transaction.
While WAL could be enhanced to fix 1, it appears difficult to have 
different limits for different types of transactions as Oracle supports 
in 2.

Thinks I don't like about the Oracle approach:

1 Not only updates, but also long running queries can be aborted if the 
rollback segment size it too small, as the undo is necessary to create 
an snapshot of the state of the database at the time the query started.

thanks,
--Barry

> 



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Plans for solving the VACUUM problem
Следующее
От: Tulio Oliveira
Дата:
Сообщение: Prevent CREATE TABLE