Oracle Performance Firefighting
by Craig Shallahamer

Get the book here



Craig Shallahamer's Blog

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.
Please—Out 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.

-------------------------------
<p>The LRU chains (or LRU lists, as they are sometimes called) have had their associated algorithms change many times over the years. But while the algorithms have changed, the functions of the LRU chains remain the same: to help keep popular buffers in the cache and to help server processes quickly find replaceable buffers. Anytime a single list strives to fulfill two missions, there will undoubtedly be some compromise. The LRU chains are no different. But as you'll discover, Oracle's current LRU algorithm implementation works wonderfully, supporting buffer caches over 100GB with the incredibly high transaction rates required for massive telecom and governmental systems. </p><p>Back in Oracle 6 days, there was only a single LRU chain protected by a single LRU chain latch. On large OLTP systems, DBAs battled LRU chain latch contention. But starting with Oracle 7, Oracle helped relieve the situation by segmenting the single LRU chain into many smaller LRU chains, giving each its own LRU chain latch. Every cached buffer is represented in the CBC structure and is also represented on either one of the LRU chains or one of the write lists (commonly called a dirty list). Buffers do not reside on both a write list and an LRU list. </p><p>LRU chains are much, much longer than CBCs. A 1GB 8KB buffer cache with 126,126 buffers and 16 LRU chains (the default) means that each LRU chain is, on average, 7,888 buffer headers long. A smaller system with a 250MB 8KB buffer cache containing 31,563 buffers and 8 LRU chains (by default) means that each LRU is around 3,945 buffer headers long. There will be some dirty buffers on the write list, but Oracle tries to keep that list very short. So although the numbers in these examples are not exact, they do present a good picture of how long LRU chains can be. This is important to keep in mind, because when diagramming LRU chains, as in Figure 6-15, they are usually drawn with only a few buffer headers. </p>
©2009, 2010 by Craig Shallahamer. This is copyrighted material.
Please—Out 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.


Know what's important before it's too late!

OraPub's
Performance Training

is like no other...





More Class Pics...
Get student testimonials!