Designing buffer pools
The sizes of all buffer pools can have a major impact on the performance of your database.
- What buffer pool name do you want to use?
- Whether the buffer pool is to be created immediately or following the next time that the database is deactivated and reactivated?
- Whether the buffer pool should exist for all database partitions, or for a subset of the database partitions?
- What page size you want for the buffer pool? See Buffer pool page sizes .
- Whether the buffer pool will be a fixed size, or whether the database
manager will automatically adjust the size of the buffer pool in response
to your workload? It is suggested that you allow the database manager
to tune your buffer pool automatically by leaving the SIZE parameter
unspecified during buffer pool creation. For details, see the SIZE
parameter of the
CREATE BUFFERPOOL statement
and Buffer pool memory considerations. - Whether you want to reserve a portion of the buffer pool for block
based I/O? For details, see:
Block-based buffer pools for improved sequential prefetching
.
Relationship between table spaces and buffer pools
When
designing buffer pools, you must understand the relationship between
table spaces and buffer pools. Each table space is associated with
a specific buffer pool. IBMDEFAULTBP is the default buffer pool. The
database manager also allocates these system buffer pools: IBMSYSTEMBP4K,
IBMSYSTEMBP8K, IBMSYSTEMBP16K, and IBMSYSTEMBP32K (formerly known
as the hidden buffer pools
). To associate another buffer pool
with a table space, the buffer pool must exist and the two must have
the same page size. The association is defined when the table space
is created (using the CREATE TABLESPACE statement), but it can be
changed at a later time (using the ALTER TABLESPACE statement).
Having more than one buffer pool allows you to configure the memory used by the database to improve overall performance. For example, if you have a table space with one or more large (larger than available memory) tables that are accessed randomly by users, the size of the buffer pool can be limited, because caching the data pages might not be beneficial. The table space for an online transaction application might be associated with a larger buffer pool, so that the data pages used by the application can be cached longer, resulting in faster response times. Care must be taken in configuring new buffer pools.
Buffer pool page sizes
However, you might need a buffer pool that has different characteristics than the system buffer pool. You can create new buffer pools for the database manager to use. You might have to restart the database for table space and buffer pool changes to take effect. The page sizes that you specify for your table spaces should determine the page sizes that you choose for your buffer pools. The choice of page size used for a buffer pool is important because you cannot alter the page size after you create a buffer pool.
Buffer pool memory considerations
- Memory requirements
- When designing buffer pools, you should also consider the memory requirements based on the amount of installed memory on your computer and the memory required by other applications running concurrently with the database manager on the same computer. Operating system data swapping occurs when there is insufficient memory to hold all the data being accessed. This occurs when some data is written or swapped to temporary disk storage to make room for other data. When the data on temporary disk storage is needed, it is swapped back into main memory.
- Buffer pool memory protection
With Version 9.5, data pages in buffer pool memory are protected using storage keys, which are available only if explicitly enabled by the DB2_MEMORY_PROTECT registry variable, and only on AIX®, running on POWER6.
Buffer pool memory protection works on a per-agent level; any particular agent will only have access to buffer pool pages when that agent needs access. Memory protection works by identifying at which times the Db2® engine threads should have access to the buffer pool memory and at which times they should not have access. For details, see: Buffer pool memory protection (AIX running on POWER6).