This blog post is generic in nature and based on my recent experience with a content management system where securefile BLOBs are critical in storing and retrieving the checked in content. It is stro ngly suggested to check the official documentation in addition to these brief guidelines. In general, Oracle Database SecureFiles and Large Objects Developer's Guide 11g Release 2 (11.2) is a good starting point when creating tables involving SecureFiles and LOBs.
Guidelines
- Tablespace: create the LOB in a different tablespace isolated from the rest of the database
- Block size: consider larger block size (default 8 KB) if the expected size of the LOB is big
- Chunk size: consider larger chunk size (default 8 KB) if larger LOBs are expected to be stored and retrieved
- Inline or Out-of-line: choose "
DISABLE STORAGE IN ROW
" (out-of-line) if the average LOB size is expected to be > 4 KB. The default inlining is fine for smaller LOBs - CACHE or NOCACHE: consider bypassing the database buffer cache (
NOCACHE
) if large number of LOBs are stored and not expected to be retrieved frequently - COMPRESS or NOCOMPRESS: choose
COMPRESS
option if storage capacity is a concern and a constraint. It saves disk space at the expense of some performance overhead. In a RAC database environment, it is recommended to compress the LOBs to reduce the interconnect traffic - De-duplication: by default, duplicate LOBs are stored as a separate copy in the database. Choosing
DEDUPLICATE
option enables sharing the same data blocks for similar files thus reducing storage overhead and simplifying storage management - Partitioning: consider partitioning the parent table to maximize application performance. Hash partitioning is one of the options if there is no potential partition key in the table
- Zero-Copy I/O protocol: turned on by default. Turning it off in a RAC database environment could be beneficial. Set the initialization parameter
_use_zero_copy_io=FALSE
to turn o ff the Zero-Copy I/O protocol - Shared I/O pool: database uses the shared I/O pool to perform large I/O operations on securefile LOBs. The shared I/O pool uses shared memory segments. If this pool is not large enough or if there is not enough memory available in this pool for a securefile LOB I/O operation, Oracle uses a portion of PGA until there is sufficient memory available in the shared I/O pool. Hence it is recommended to size the shared I/O pool appropriately by monitoring the database during the peak activity. Relevant initialization parameters:
_shared_io_pool_size
and_shared_iop_max_size
Also see:
Oracle Database Documentation : LOB Performance Guidelines