Book Library – Finding Motivation

16 01 2010

January 16, 2010

I occasionally see requests for book suggestions in various Internet forums, blogs, and various other websites.  I am typically very careful when preparing to buy a book, since it my money that will be wasted if the book’s contents are worthless.  I try to read the reviews for books on, blogs, and various other sites to try to determine if the book’s contents should have been retired with the release of Oracle Database 8.0, whether or not the book’s authors emphasize volume over technical quality, and whether or not people are willing to rely on a particular author’s advice.

I thought that it might be interesting to look at my book library to see if I would be able to offer any advice.  My book library at home looks like the following picture (I intentionally or unintentionally left out about 6 to 10 books) – click the picture to see a larger version.

 If you closely examine the books, you probably will be able to tell that I need to spend a little more time digging through the books on the right (and the four years of related magazines that have been sitting mostly unread).

Here is my personal book library at work – click the picture to see a larger version.

As I wrote in this OTN thread, a small number of Oracle books marked distinct turning points in my knowledge of Oracle.  Additionally, it is necessary to find motivation to continue learning whatever subject falls at your feet.  In the OTN thread, I stated the following:

I have been very fortunate to buy and read several very high quality Oracle books which not only correctly state the way something works, but also manage to provide a logical, reasoned explanation for why things happen as they do, when it is appropriate, and when it is not. While not the first book I read on the topic of Oracle, the book “Oracle Performance Tuning 101” by Gaja Vaidyanatha marked the start of logical reasoning in performance tuning exercises for me. A couple years later I learned that Gaja was a member of the Oaktable Network. I read the book “Expert Oracle One on One” by Tom Kyte and was impressed with the test cases presented in the book which help readers understand the logic of why Oracle behaves as it does, and I also enjoyed the performance tuning stories in the book. A couple years later I found Tom Kyte’s “Expert Oracle Database Architecture” book at a book store and bought it without a second thought; some repetition from his previous book, fewer performance tuning stories, but a lot of great, logically reasoned information. A couple years later I learned that Tom was a member of the Oaktable Network. I read the book “Optimizing Oracle Performance” by Cary Millsap, a book that once again marked a distinct turning point in the method I used for performance tuning – the logic made all of the book easy to understand. A couple years later I learned that Cary was a member of the Oaktable Network. I read the book “Cost-Based Oracle Fundamentals” by Jonathan Lewis, a book by its title seemed to be too much of a beginner’s book until I read the review by Tom Kyte. Needless to say, the book also marked a turning point in the way I approach problem solving through logical reasoning, asking and answering the question – “What is Oracle thinking”. Jonathan is a member of the Oaktable Network, a pattern is starting to develop here. At this point I started looking for anything written in book or blog form by members of the Oaktable Network. I found Richard Foote’s blog, which some how managed to make Oracle indexes interesting for me – probably through the use of logic and test cases which allowed me to reproduce what I reading about. I found Jonathan Lewis’ blog, which covers so many interesting topics about Oracle, all of which leverage logical approaches to help understanding. I also found the blogs of Kevin Closson, Greg Rahn, Tanel Poder, and a number of other members of the Oaktable Network. The draw to the performance tuning side of Oracle administration was primarily for a search for the elusive condition known as Compulsive Tuning Disorder, which was coined in the book written by Gaja. There were, of course, many other books which contributed to my knowledge – I reviewed at least 8 of the Oracle related books on the website

The above was written before I set up this blog – there are more book reviews on this blog here:  In the above pictures you will see all of the books that I referenced in the OTN post, as well as the book that I had the opportunity to co-author with a fairly large number of OakTable Network members (top photo – I have not yet received my printed copy of the book from Amazon, so the picture shows a printed copy of the electronic version from Apress).  There are of course a large number of books in my personal library at work – as you can see, I have the opportunity to dig into much more than Oracle Database.  I have read most of the books cover to cover, and a very small number of the books have been read cover to cover twice.

My post in the OTN thread continues:

Motivation… it is interesting to read what people write about Oracle. Sometimes what is written directly contradicts what one knows about Oracle. In such cases, it may be a fun exercise to determine if what was written is correct (and why it is logically correct), or why it is wrong (and why it is logically incorrect). Take, for example, the “Top 5 Timed Events” seen in this book …

The text of the book states that the “Top 5 Timed Events” shown indicates a CPU Constrained Database (side note: if a database is a series of files stored physically on a disk, can it ever be CPU constrained?). From the “Top 5 Timed Events”, we see that there were 4,851 waits on the CPU for a total time of 4,042 seconds, and this represented 55.76% of the wait time. Someone reading the book might be left thinking one of:

  • “That obviously means that the CPU is overwhelmed!”
  • “Wow 4,851 wait events on the CPU, that sure is a lot!”
  • “Wow wait events on the CPU, I didn’t know that was possible?”
  • “Hey, something is wrong with this ‘Top 5 Timed Events’ output as Oracle never reports the number of waits on CPU.”
  • “Something is really wrong with this ‘Top 5 Timed Events’ output as we do not know the number of CPUs in the server (what if there are 32 CPUs), the time range of the statics, and why the average time for a single block read is more than a second!”

Another page from the same book shows this command:

alter system set optimizer_index_cost_adj=20 scope = pfile;

Someone reading the book might be left thinking one of:

  • That looks like an easy to implement solution.
  • I thought that it was only possible to alter parameters in the spfile with an ALTER SYSTEM command, neat.
  • That command will never execute, and should return an “ORA-00922: missing or invalid option” error.
  • Why would the author suggest a value of 20 for OPTIMIZER_INDEX_COST_ADJ and not 1, 5, 10, 12, 50, or 100? Are there any side effects? Why isn’t the author recommending the use of system (CPU) statistics to correct the cost of full table scans? 

I suggest that you try reading an old Oracle book, such as “Practical Oracle 8i”, and see if you are able to pick out anything that is:

  • Obviously wrong, and was never correct.
  • Obviously wrong since Oracle (or some other release version), but was 100% correct at the time the book was written.
  • Obviously correct now, just as it was when the book was originally written.
  • Grossly over applying a fix that worked in a finite set of conditions (possibly due to false correlation) to situations with nearly infinite scope.

Someone posted a comment on this blog asking for a sequenced list of book recommendations for learning Oracle Database.  I suggested that the list of books might be a bit different depending on whether the person had an interest in general DBA work or performance tuning (or development, or …).  The suggestions that I provided to the comment follow:

Quick suggestions:

  • A solid foundation of Oracle specific SQL is needed. I enjoyed reading “Mastering Oracle SQL and SQL*Plus“, and I believe that book provides a solid foundation. That book appears to be in the process of being updated, and might even include page numbers this time ( I am currently reading “Oracle SQL Recipes: A Problem-Solution Approach” (, probably about 30 pages into the book now – and I believe that I have already found a small handful of minor errors/issues with the book that would make it difficult to use as a starting point.
  • A solid foundation of understanding Oracle’s behavior is needed. I believe that Tom Kyte’s “Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions” book ( is one of the best sources. I understand that Tom Kyte also re-wrote the Oracle “Concepts Guide” (, so that might be a decent substitute for his book.
  • If you are planning to do general DBA work, probably the next book should be on the topic of RMAN. The books in the Oracle documentation library are good, and you will find two reviews of other RMAN books on this blog.
  • Next, I would suggest reading a book that provides a solid foundation of the Oracle wait interface. “Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning” seems to be the best source of that information, but it would be nice to see an update of the book that covers more recent releases of Oracle.
  • Next, the “Oracle Performance Tuning Guide” from the Oracle documentation library.
  • Next, I suggest the book “Troubleshooting Oracle Performance” – the book is great for not only introducing people to various approaches for troubleshooting problems, but also provides foundation knowledge that is needed in order to understand why an approach worked.
  • Next, I suggest digging deeper into troubleshooting with 10046 trace files – Cary Millsap’s “Optimizing Oracle Performance” is the best source for this information.
  • Next, I suggest digging deeper into troubleshooting with 10053 trace files – Jonathan Lewis’ “Cost-Based Oracle Fundamentals” is the best source for this information.

+ If queueing theory, introduced in “Optimizing Oracle Performance“, is of interest, take a look at “Forecasting Oracle Performance”

+ If Statspack/AWR report reading, introduced in the “Performance Tuning Guide” is of interest, see the excellent series of articles on Jonathan Lewis’ blog.

+ If you want your jaw to drop, take a look at Tanel Poder’s blog. I also recommend reading all of the blog entries on Jonathan Lewis’ blog and Richard Foote’s blog.

+ I have now read most of the chapters in the “Expert Oracle Practices: Oracle Database Administration from the Oak Table” book.  The book contains theory, tuning philosophy, tuning/troubleshooting logic, test cases, and up to date information that cannot be found in any other book.  It is my opinion that this book belongs in the “Quick suggestions” list above.  Disclaimer: Just estimating here, for every 17 copies of this book that are sold, I think that I will have enough royalty money to buy a soda drink from the vending machine (my recommendation has nothing to do with how thirsty I am right now 🙂 ).  It is my belief that the motivation for all of the authors of this book was simply to help readers improve their skills well beyond the basics.



4 responses

10 02 2010

A very good list of books that will enhance the knowledge and understanding of the Oracle database for both novice and seasoned DBAs.


20 04 2010
Fahd Mirza

Very enlightening indeed. One book, I would recommend is SQL Tuning by Dan Tow. I wonder why he is not the member of Oak Table Network.


13 05 2011

Hi Charles,

Did you read the following book:

if yes, your opinion concerning this book interests me

13 05 2011
Charles Hooper


I previously looked at that book and decided not to purchase it. The books that I review are ones that I purchased – it seems that I either need to be curious about a book (or its author) or believe that I would learn a lot from the book, before I will spend money on a book. I read the reviews on the U.S. Amazon site:

I also read a portion of the book using the Amazon “Look Inside” feature to read a couple of paragraphs from the book. On one of the early pages I found the following statement:

“Those that found Oracle SQL High Performance Tuning useful should find this book a more than adequate substitute for a third edition [of that book].”

I happen to have the second edition of Guy Harrison’s “Oracle SQL High Performance Tuning” book on my bookshelf. While I missed the errors the first time I read that book in 2001, a couple of years ago I flipped through a couple of pages in that book and found several statements that are as true today as they were when the book was written (and were just as true in the year 1840 – in other words, the statements were incorrect). The above quoted statement did not make me curious about the book.

I just quickly scanned through a couple of pages of the “Oracle Performance Survival Guide” book on Amazon. I found a couple of positives in the book and a couple of negatives. Here is what I found during a quick peek in the book:
Page 36:
Mentions using the utlxplan.sql script to create a PLAN_TABLE in your schema, and mentions that this is usually not necessary starting with Oracle 10g because there is a global temporary PLAN_TABLE. Tom Kyte’s book failed to mention the part about 10g, so that is a positive for this book.

Page 37:
The descriptions of the COST, ACCESS_PREDICATES, FILTER_PREDICATES, and possibly a couple of other columns need improvement, either for accuracy or clarity. Much more clarity could have been provided for all of the columns.

Page 46:
The descriptions of the TmpSpc, Reads, and possibly a couple of others needs improvement, either for accuracy or clarity.

Page 47:
When describing the order of execution of operations in an execution plan, the book states “The more heavily indented an access path is, the earlier it is executed. If two steps are indented at the same level, the uppermost statement is executed first.” Let’s just say that the Oracle Performance Tuning book in the Oracle documentation library, even though it too made at least one error, is a bit more correct than this book.

Page 611:
“Most notably, George Moore’s famous Moore’s law postulated that the number of transistors that can be placed on an integrated circuit increases exponentially, doubling every 1 to 2 years.” George?
“Although disks are slowly getting faster, the rapid increase in the average size of a disk means that the average IO per MB is actually decreasing.” Maybe I took this sentence out of context, but I don’t think that “average IO per megabyte” would be different in 2001 than it is in 2011. The sentence (out of context) might also incorrectly imply that over time a given hard drive will gradually improve in performance, which I am certain was not the intended meaning.

Page 614:
Correctly describes the db file scattered read wait event as reading contiguous blocks, while at least one other book (“Oracle Performance Firefighting”) that I read stated that the blocks being read are actually scattered on the disk.

Page 629:
Seems to imply that RAID 10 and RAID 0+1 are the same thing.

Page 700:
Lists several of the author’s favorite books including: “Troubleshooting Oracle Performance”, “Secrets of the Oracle Database”, “Expert Oracle Database Architecture”, “Cost-Based Oracle Fundamentals”, “Oracle Performance Firefighting”, “Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning”.

Page 701-702:
I can’t argue with the list of blog sites.

In summary, the book could be fantastic with a couple areas that need fine tuning, or the book could be a complete disaster with only a couple of strong points. It appears that a long review of the book was written by someone for the February 2010 NoCOUG Journal (I have not read the full review – just the short version that was posted by the same person to Amazon’s website):

Click to access NoCOUG_Journal_201002.pdf

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: