Oracle的Giri Mandalika给我们介绍了LOB大型对象的一些调优注意事项,之前我一直对_shared_io_pool_size这个undocumented参数不甚了解,
以为它是一个shared pool相关的参数,根本原因是甚至没有任何一个公开的Mos Note介绍了这几个隐藏参数。
而这篇文章给出了比较好的解释,这里引用一下:
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 recommen ded 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