Oracle Core

As Martin I had a pleasure to “unofficially” review Jonathan’s latest book, Oracle Core. It was my first experience in the area of printed content. If you want to know little bit more how the process went, my opinion on the book and what to expect from it – I’ll try to cover these points here.

Well, it wasn’t planned. After reading book announcement, I just thought “why not?”, wrote an e-mail to Jonathan and offered my feedback. He didn’t mind to add me as a second “author’s reviewer”. What does it mean – I had to read the text and ask questions that are crossing my mind as I read the book: what’s not described well enough, what could be improved and possibly how. Sounds not too difficult. And honestly I think anyone can do this pretty easily if he/she has spare time, fundamental understanding of Oracle database Concepts, medium-level knowledge of English, likes to learn, can put different things together and spot “anomalies” in a technical text. By “anomaly” I mean something that either doesn’t sound right or something that is missing in a sequence of logically connected statements. If you read and comment a blog on a subject – that is, I think, more or less the same thing, except that average “blog post” (a chapter) approximately ten times bigger. In fact I’d say the book follows the same style Jonathan uses in his blog. And this is very good /me thinks. It made reading easy and approach is familiar to me and very often I had a feeling that I know what will be discussed in the next sentence or paragraph and how it will be presented. Maybe it’s because most topics that are in the book are also covered in the blog, or maybe something else – I don’t know.
Although I had to read a book as a reader, I inevitably found technical concerns during reading. Right now looking at the comments I’ve made I realize that I can’t fully understand all of them :) which means I’ll have to re-read final version. Briefly scrolling through the book it looks like vast majority of comments have been taken into account – and I’m glad to see it, even though not all corrections made it to final version.
So I read book draft with speed of around one chapter per one or two weeks, and it took three months or so to go through the whole book. I read each chapter one time only. Most of the book went pretty well this way and I simply didn’t need to read material again, although some paragraphs took me several attempts before I understood what Jonathan wanted to express. Usually it was one big sentence which beginning was hard to remember at its end. In this case, of course, I left a comment that statement is too long or not clear. Total number of such statements was not high, I think it was less than one per chapter. Most my comments were about missing or, on the contrary, too many words and slight corrections here and there. Biggest number of comments was 33 and it was for the hardest chapter in my opinion, Chapter 2 Redo and Undo; on average it was 16 comments (for 8 chapters plus Glossary). By the way, Apress site for some reason shows the book has 9 chapters, although there’re just 8 and Glossary.
Short comments on the book:

Chapter 1 Introduction This is a very compact part which highlights Oracle database architecture and how the book is organized and why it is this way and not another. Straight to the point and nothing more. I like that.

Chapter 2 Redo and Undo Once again, the hardest chapter of the book in my view. It describes fundamental Oracle capabilities that are crucial for making Oracle database ACID-compliant and able to handle concurrent work efficiently. What makes chapter so hard is right from the beginning there’s extensive usage of “internal” stuff such as block and redo log file dumps. I think that beginners (which are also target book audience per Apress site) will be confused, even with a quite useful Appendix (called Dumping and Debugging) that lists all the methods used in the book. What I liked in this chapter the most is I finally started to understand (or think that I understand) concept of in-memory undo. I’ve read about it several times already, but all that I read didn’t give me clear picture of this 10g enhancement.

Chapter 3 Transactions and Consistency Undo, that was partially explained in the previous chapter, is discussed further – how it is organized down in the deep so that Undo can be used to support consistent reads – efficiently. Overall the chapter is on a similar level of complexity as Chapter 2. One part that I will definitely need to re-read again is about Transaction Table Rollback – I didn’t get it after one pass reading.

Chapter 4 Locks and Latches (and Pins and Mutexes) This one is about concurrency. The facilities Oracle uses to work properly in multi-user environment. First part is about latches, and it is covered using library cache as an example structure that needs to stay in coherent state. Mutexes, appeared in Oracle 10g, are introduced here. Second part discusses locks – the enqueue infrastructure; and KGL Locks and Pins – similar tools for “old-style” library cache; it also notes how things have changed in a recent Oracle release.

Chapter 5 Caches and Copies It’s about how Oracle organizes data caches: memory granules, buffer headers and linked lists, working data sets and hash buckets and similar topics. The most interesting bit to me was to know Oracle can use Recycle cache (or pool) for CR blocks that are assigned to Keep cache (pool), thus increasing Keep cache efficiency. There’re more than these topics as well; it’s just what I remember the most.

Chapter 6 Writing and Recovery The chapter tells what Log Writer does with log buffer and when; what happens when session commits and makes its changes durable; ACID anomaly associated with Oracle implementation; why excessive ‘log file sync’ waits can be CPU issue. Then it goes to Database Writer to discuss checkpointing and interactions with Log Writer. And finally – recovery and associated technologies such as Standby and Flashback database.

Chapter 7 Parsing and Optimizing My personal favorite chapter. It’s about shared pool: library cache, dictionary (row) cache and parsing activities; how shared pool memory is organized and why ORA-04031 can happen when there’s plenty of space; what happens when client makes parse call. I think it’s the first time I can say I (think I) understand how shared pool memory is organized. What I like in this chapter is parallels between completely different memory areas – buffer cache and shared pool.

Chapter 8 RAC and Ruin Real Application Clusters is not a simple technology, although Oracle Corp pushes it to the masses (and I don’t like them for doing this). In this chapter RAC is neatly overviewed, with the main question “How Can It Work?”. Main features, GES & GCS services are explained with the consequences of them for performance and recovery.

What’s in total? The book is simply one of a kind. Within 250 (!) pages you’ll find incredible view how Oracle works on the low-level. You’ll not find something similar anywhere, so if you are still in doubt to buy or not to buy the book I strongly suggest you to buy a copy. If you missed Happy Cyber Monday, you can buy either Amazon Kindle Edition for $19.59 or use promo code SNOW11 on the Apress site until December 25th and get 40% discount on any e-book, which means “Oracle Core” will cost you $16.79. Still great deal for great book, don’t miss it!