# Christian Bilien’s Oracle performance and tuning blog

## January 28, 2008

### An upper bound of the transactions throughputs

Filed under: Models and Methods — christianbilien @ 9:46 pm

Capacity planning fundamental laws are seldom used to identify benchmark flaws, although some of these laws are almost trivial. Worse, some performance assessments provide performance outputs which are individually commented without even realizing that physical laws bind them together.

Perhaps the simplest of them all is the Utilization law, which states that the utilization of a resource is equal to the product of its throughput and its average service time. The utilization is the portion of time the resource is busy serving requests. The cpu(s) utilizations are given by sar –u. The individual disk utilizations in a storage array by the storage vendors proprietary tools. sar -d or iostat can be used to collect data for internal disks.

Take a disk serving a fairly steady load I picked up on an HP-UX test system with no storage array attached . sar –d gave the following data:

 Time Utilization(%) Service time(ms) Reads/s Writes/s 15:07 70.8 10 4 67 15:12 67.3 12.3 30.6 24.1 15:17 67.8 12 33.7 22.7

This formula can be verified for the 3 points I picked up:

Utilization = (Read/s+writes/s) x service time

This law can be used to define an asymptotic bound, which is an optimistic bound since it indicates the best possible performance. If each application transaction spends ${D}_{k}$ seconds on disk $k$, and ${X}$ is the application throughput, the utilization law can be rewritten for disk $k$ as ${U}_{k}=X*{D}_{k}$. An increase in the arrival rate can be accommodated as long as none of the disks are saturated (i.e. has a utilization of 100%). The throughput bound ${X}_{max}$ is therefore the arrival rate at which any of the disk centers saturates. If ${D}_{max}$ is the maximum disk service time, the upper bound to the transaction throughput can be found when one of the disks has a utilization of 1 (100%):

${D}_{max}*{X}_{max}=1$

therefore

${X}_{max}=\frac{1}{{D}_{max}}$

Let’s replace our disk by a single volume which encompasses a whole raid group inside an array, and consider that this raid group is dedicated to a single batch. Other raid groups participate to the transactions but we’ll focus on the most accessed one. If our transaction needs to make 10 synchronous visits (meaning each of them has to wait for the previous one to complete) to the most accessed volume in the storage array, and each of the visits “costs” 10ms, we’ll have ${D}_{max}$=100ms=0.1s. The best possible throughput we can get is 10 transactions per seconds.