Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: log manager in ORACLE?
No problems.
Data in buffers is flushed to disk by DBWR, and he fires off:
The key point is that DBWR has its own schedule of events, and none of these events bears any relation to the state of a transaction. You can be in the middle of a transaction, and still have your buffer (and its associated rollback buffers, of course) flushed to disk if we need the space. Or (and here's the real performance booster) you can issue a commit and NOT have your buffer flushed to disk.
Regards
HJR
"Y" <newdbms_at_yahoo.com> wrote in message news:3C69DA1E.9F01579C_at_yahoo.com...
> Greate! Thank you so much Howard!
> Would you tell me when the data in buffers will flush to datafiles in
Oracle?
> Best Regards,
> Y.
>
> "Howard J. Rogers" wrote:
>
> > Comments below.
> >
> > "Y" <newdbms_at_yahoo.com> wrote in message
news:3C6881C6.45770644_at_yahoo.com...
> > > Hi,
> > > I am using Oracle 8i EE.
> > > I took a quick view of oracle books. I haven't found a direct answer
for
> > > my questions.
> > > I just want to know how log manager works in Oracle?
> > >
> > > For example, when I issue one update sql request,
> > >
> > > 1. Oracle read the datablock from datafiles on disk into buffer.
Before
> > > update data block, oracle first write the before and after image to
log
> > > buffer?
> > >
> >
> > Pretty accurate so far. Actually, it takes a lock on the row(s) first,
then
> > writes the before and after images into the log buffer.
> >
> > > 2. When and what information will be written to Rollback Segments?
> > >
> >
> > Immediately after that, it writes just the before image of the row or
> > affected columns into the redo block (which it reserved for the purpose
> > somewhere around question 1).
> >
> > > 3. When the transaction end or the log buffer pool full, log buffer
> > > pool flush to redo log files?
> > >
> >
> > Nope. The log buffer is flushed whenever it is one third full, so it
should
> > never get totally full. Ending the transaction with a commit will
indeed
> > cause a flush, however. LGWR will also flush if 1Mb of uncommitted redo
has
> > been generated, and the buffer is bigger than 3Mb (otherwise the 1/3rd
full
> > rule would always kick in earlier). And LGWR will always flush anytime
DBWR
> > signals it wants to flush (DBWR is working to its own agenda, and can
flush
> > for all sorts of reasons, none of which are transaction specific. But
> > whenever it threatens to flush, it's crucial that LGWR finishes its
flush
> > first, since it is the entries in the redo logs that lets us sort out
the
> > mixture of committed and uncommitted data we'd find in our datafiles
after
> > an unexpected shutdown.)
> >
> > > 4. The rollback segments will only keep before and after image for
open
> > > transactions. Is that correct? The redo log files will store the
before
> > > and after image of unactive transactions. Is that correct?
> > >
> >
> > No. Rollback segments store the before image of transactions whether
they
> > are committed or not. We need the before image of committed
transactions to
> > generate read consistent images of the data for queries which *started*
> > before transactions were committed. However, it is permissible to
overwrite
> > the rollback of transactions which have been committed -but if we do,
you'd
> > best pray that no reports need that rollback for read-consistent image
> > purposes, otherwise you'll have an ORA-1555 Snapshot Too Old error
message
> > generated.
> >
> > It's also the case that when LGWR flushes the log buffer, it flushes ALL
> > previously unflushed transactions into the redo logs. That can include
> > committed as well as uncommitted transactions. Therefore, the redo logs
> > store the before and after image of ALL transactions, committed or
> > uncommitted makes no difference (or, in your terms, 'active' or
'inactive').
> >
> > Regards
> > HJR
> >
> > > Thanks for any help?
> > > Y
> > >
>
Received on Tue Feb 12 2002 - 21:26:55 CST