 |
|
Oracle multiple block sizes
Don Burleson
|
Important 2015 Update:
For the latest consensus on using multiple blocksizes in Oracle, see
The latest consensus on multiple
blocksizes.
I've been using multiple blocksizes
on mainframes since the 1980's, and Oracle since 9i, and it's a well
proven tool, used by many of the hardware vendors themselves.
These
Oracle TPC benchmarks thoroughly tested multiple blocksizes vs.
one-size fits all, and they chose multiple blocksizes because it
provided the fastest performance. HP spent a small fortune doing
their testing because they wanted their benchmark to have truly
stunning speed, and multiple blocksizes (and the segregated pools)
worked for them. Also, this
UNISYS Oracle benchmark used multiple blocksizes to achieve
optimal performance:
db_cache_size = 4000M
db_recycle_cache_size = 500M
db_8k_cache_size = 200M
db_16k_cache_size = 4056M
db_2k_cache_size = 35430M
Benefits from multiple blocksizes have been seen in my experience
with many Fortune 500 companies that utilize multiple blocksizes,
benefits to both performance and manageability:
- Far better management of buffering with multiple buffers - Less RAM wastage in the SGA
For my clients, the best part is segregating objects that get
multi-block scans (e.g. index FFS, range scans) into 32k blocksizes.
The benefits of a large blocksize
The benefits of large blocksizes are demonstrated on this
OTN thread where we see a demo showing 3x faster performance
using a larger block size:
SQL> r
1 select count(MYFIELD) from table_8K where ttime
>to_date('27/09/2006','dd/mm/y
2* and ttime <to_date('06/10/2006','dd/mm/yyyy')
COUNT(MYFIELD)
-------------------
164864
Elapsed: 00:00:01.40
...
(This command is executed several times - the
execution time was approximately the same ~
00:00:01.40)
And now the test with the same table, but created together with
the index in 16k tablespace:
SQL> r
1 select count(MYFIELD) from table_16K where ttime
>to_date('27/09/2006','dd/mm/
2* and ttime <to_date('06/10/2006','dd/mm/yyyy')
COUNT(MYFIELD)
-------------------
164864
Elapsed: 00:00:00.36
(Again, the command is executed several times,
the new execution time is approximately the same ~
See my other notes on multiple blocksizes here:
|