When I wrote Optimizing Oracle Performance with Jeff Holt back in 2003, my goal was to define a reliable, teachable method for fixing software performance problems. After a few months of contentment having finishing the project, I began to notice a trend in how people were responding to it. Many of the questions coming in had started to repeat themselves: “Sure, fixing problems is important, but how can I prevent them?” “The book was fun, but of course I didn’t read the chapter on queueing theory; is that stuff really important, anyway?” “Where does capacity planning fit in?” …And, sadly, I continued to see people make some of the same mistakes that we had tried to warn people about in the book.
One day, in response to a sequence of questions to which I had responded hundreds of times (at least it seemed), I sat down to write the simplest summary I could of everything I thought people needed to know about software performance. My goal was to connect all the topics in the software performance domain that people needed to understand. To my surprise, the paper just flowed out in a coherent document that really wasn’t too long or too difficult to read.
I began by explaining why we should approach performance scientifically in the first place. I defined what performance was, how to measure it, and how to say what you want. I showed how performance problem diagnosis works and how tools like the sequence diagram and the profile help you accomplish your goals. I described how efficiency and speed are different things, how load affects performance, and how capacity planning fits into the whole performance equation. Finally, I wanted to show how instrumentation and logging are vital to creating and running software that meets tough performance constraints.
The original paper has been downloaded nearly 20,000 times. It has won numerous awards at conferences, and it was published as a two-part article in both ACM Queue and Communications of the ACM. Through the years, I have substantially improved the original paper, and now it is included as chapter 1 of the book The Method R Guide to Mastering Oracle Trace Data, 2nd edition, which serves as the textbook for the course.