You were brought to this page based on an internet search
and as a free service to Oracle DBAs.
The text below is an except from the book,
Oracle Performance Firefighting, written by
Craig Shallahamer of
OraPub, Inc.
Figures and tables are not included on this page, only their reference.
To order the book in either print or PDF form, click
here.
©2009, 2010 by Craig Shallahamer. This is copyrighted material.
PleaseOut of respect for those involved in the creation of the book and also for
their familes, we ask you to respect the copyright both in intent and deed. Thank you.
-------------------------------
Write lists, commonly called dirty lists or LRU-W lists, are composed entirely of dirty buffer headers. Each of the dirty buffer headers is also in the CBC structure. Oracle has the concept of a working set, which consists of an LRU latch, an LRU chain, and a write list. Each database writer is associated with one or more working sets. Upon instance startup, Oracle will determine the number of working sets and the number of database writers (init.ora db_writer_processes, which has a default of 1), and then set their association. When a database writer writes, it feeds off one of its write lists. Both server processes and database writers move unpopular dirty buffer headers from their LRU chains to their associated write lists. Now let's inject some movement into these facts.
Multiblock writes are more efficient than single-block writes, so the database writer builds up a dirty list before it writes. Over the years, Oracle has changed the instance parameters and algorithm to control the minimum dirty list batch size. In fact, Oracle has even used a self-adjusting algorithm to account for bursts in dirty buffers. When the database writer is in the midst of a multiblock write, it will post the wait event db file parallel write.
The v$session_wait parameters are documented to provide the number of blocks being written, but I have personally not found this accurate. Once again, I turn to operating system tracing. Figure 6-22 shows the result of tracing an active database writer process. There are three columns: the pwrite command, the number of bytes written, and the number of 8KB Oracle blocks written. Your system will look different, but don't be surprised to see the database writer submit a write request of more than 100 Oracle 8KB blocks!
©2009, 2010 by Craig Shallahamer. This is copyrighted material.
PleaseOut of respect for those involved in the creation of the book and also for
their familes, we ask you to respect the copyright both in intent and deed. Thank you.
|