Bert Scalzo on Linux Maximus for Oracle
Mr. Bert Scalzo, a respected Oracle professionals, has published
an excellent paper titled "Linux Maximus, Part 1: Gladiator-like
Scalzo notes that Linux does not perform super-fast without
proper configuration and that tweaking Linux and Oracle can
result in a 1,000% performance improvement:
"Believe it or not, it's quite easy to get upwards of
1000% database improvement through proper Linux tuning and
database configuration for Linux."
In the section titled "DB low hanging fruit", Mr. Scalzo notes
that doubling the database blocksize improved TPC-C throughout:
"Even a PC with its limited bus and I/O capabilities can
reap huge benefits from a larger block size. The load time
improved over 138%, with no detriment to the TPS. "
Scalzo also shows how adjusting initialization and tablespace
parameters improved Oracle performance on Linux:
"We got improvements of 342% for the load time and 24%
for the TPS; not bad for requiring absolutely no extensive
or detailed performance monitoring."
Linux Kernel Tuning for Oracle
Mr Scalzo then focuses on tuning the Linux filesystem I/O
"vm.bdflush = 100 1200 128 512 15 5000 500 1884 2
Where according to /usr/src/Linux/Documentation/sysctl/vm.txt:
The first parameter 100 %:
governs the maximum number of dirty buffers in the buffer cache.
Dirty means that the contents of the buffer still have to be
written to disk as opposed to a clean buffer, which can just be
forgotten about. Setting this to a high value means that Linux
can delay disk writes for a long time, but it also means that it
will have to do a lot of I/O at once when memory becomes short.
A low value will spread out disk I/O more evenly.
The second parameter 1200
ndirty: gives the
maximum number of dirty buffers that bdflush can write to the
disk in one time. A high value will mean delayed, bursty I/O,
while a small value can lead to memory shortage when bdflush
isn't woken up often enough.
The third parameter 128
number of buffers that bdflush will add to the list of free
buffers when refill_freelist() is called. It is necessary to
allocate free buffers beforehand, as the buffers often are of a
different size than the memory pages, and some bookkeeping needs
to be done beforehand. The higher the number, the more memory
will be wasted and the less often refill_freelist() will need to
when this comes across more than nref_dirt dirty buffers, it
will wake up bdflush.
age_buffer 50*HZ, age_super
parameters 5*HZ: govern the maximum time Linux waits
before writing out a dirty buffer to disk. The value is
expressed in jiffies (clockticks); the number of jiffies per
second is 100. Age_buffer is the maximum age for data blocks,
while age_super is for filesystem metadata.
The fifth 15 and the last two
parameters 1884 and 2: unused by the system so we
don't need to change the default ones."