Chapter 35. The Bottleneck
Maybe you’ve heard that performance is all about eliminating bottlenecks. The word itself is a metaphor: it doesn’t matter how big the bottle’s body is, the amount you can get out of it in a given time interval is constricted by the size of the little opening there at the end.
Stories about bottles and water pipes and such are fine for learning principles, but they don’t tell you what to type. And it so happens that you have to be careful about how you define bottleneck for the principle to be helpful. Here’s the definition you need: the resource that dominates the response time for a task execution is that execution’s bottleneck. If you have a profile for the execution you’re observing, then the definition is even simpler:
The bottleneck for a program execution is that execution’s largest response time contributor.
Let’s try it out. In the Payroll story, what’s the bottleneck of the PYUGEN execution? Here’s the profile again, to jog your memory:
| Duration | ||||
| Subroutine | seconds | % | Count | Mean |
| SQL*Net message from client | 984.010 | 50.3% | 95,161 | 0.010 340 |
| SQL*Net more data from client | 418.820 | 21.4% | 3,345 | 0.125 208 |
| db file sequential read | 279.340 | 14.3% | 45,084 | 0.006 196 |
| CPU service, EXEC calls | 136.880 | 7.0% | 67,888 | 0.002 016 |
| CPU service, PARSE calls | 74.490 | 3.8% | 10,098 | 0.007 377 |
| CPU service, FETCH calls | 37.320 | 1.9% | 57,217 | 0.000 652 |
| latch free | 23.690 | 1.2% | 34,695 | 0.000 683 |
| 8 other subroutines | 2.920 | 0.1% | 111,829 | 0.000 026 |
| Total (15) | 1,957.470 ... | |||
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access