You are on page 1of 2

PCTFREE and PCTUSED The PCTFREE and PCTUSED parameters tell Oracle when to link and unlink a block

from the freelist chain. The following discussion only applies if you are not using the new Automatic Segment Space Management (ASS Management). The ASS management tablespace is new in Oracle9i and is implemented by adding the SEGMENT SPACE MANAGEMENT AUTO clause to the tablespace definition. ASM tablespaces automate freelist management and remove the ability to specify PCTFREE, PCTUSED, FREELISTS, and FREELIST GROUPS storage parameters. The setting for PCTFREE sets the value for the percent of a block to reserve for updates. A block will remain on a FREELIST until it reaches blocksize * (1-(pctfree/100)) full or greater. Here are the main issues with incorrect settings:

High migrated/chained rows - If PCTFREE is too small, adequate space may not be reserved in the block for update of variable sized rows in the block, or, may not have enough space for a complete row insert. In this case a block chaining will occur where the data is migrated to a new block and a pointer will be established from the old block to a new block. High I/O - This will result in doubling the IO required to retrieve this data. For new data blocks, the space available for inserts is equal to the block size minus the sum of the block overhead (84-107 bytes) and free space (PCTFREE/100 * blocksize). When you update existing data Oracle uses any available space in the block. So, updates will eventually reduce the available space in a block to less than PCTFREE, the space reserved for updates but not accessible to inserts. This removes the block from the freelist on which it resides.

The un-link process Blocks with total filled volume less than BLOCKSIZE overhead (blocksize*(1(PCTFREE/100)) are available for inserts. When you issue an INSERT statement, Oracle checks a free list of the table for the first available data block and uses it if possible. If the free space in the selected block is not large enough to accommodate the data in the INSERT statement, and the block is at least filled to the value PCTUSED, then Oracle will remove the block from the free list. Multiple free lists for each segment can reduce contention for free lists when concurrent inserts take place. The Re-link Process After processing a DELETE or UPDATE statement, Oracle checks to see if the space being used in the block is now less than (BLOCKSIZE overhead) * PCTUSED/100. If it is, then the block goes to the beginning of the transaction free list, and it is the first of the available blocks to be used in that transaction. However, it is only when the

transaction commits, that the free space in the block becomes available for other transactions. For tables with high levels of updates, setting PCTFREE to a high value is suggested, for blocks which are never updated, then set this to a low value. For example, for a high update table a setting of 40-50 is acceptable, while for a low or no update table (such as in a data warehouse) a setting of 5 or less is acceptable. PCTUSED must be set to less than 100-PCTFREE and should be set such that PCTFREE+PCTUSED is less than 100. If PCTFREE+PCTUSED=100 this can result in see-sawing of the block on and off the free lists which can be a performance issue. PCTFREE and PCTUSED are the block storage parameters. 1. PCTFREE- This parameter is used to specify how much space should be left in the block for updates. For eg. if The PctFree for a block is 30, then Oracle keeps on adding new rows to the block until the block is 70 % full. It leaves the 30 % for future updates. That is, in case, any row is updated and requires some more space, it is taken out from the 30 % remaining in the Block. U should specify the Value of this parameter HIGH if future updates in the rows of the table are going to need more space. In case ur table is less prone to updates, then this value can be specified LOW. PCTUSED : As I have mentioned above, Oracle stops INSERTING new Rows in a table when the space usage reaches the PCTFREE limit. Now consider this ---- When should Oracle start inserting new rows in the Block ? PctUSED parameter is taken into consideration for the answer of the above question. Suppose u have specified PCTUSED as 40 %. and PCTFREE as 20 %. 1. Oracle will keep on inserting new rows till the space is 80 % used. It will reserve the remaining 20% for future updates. 2. To start adding new rows again to the block, Oracle will check the space in the Block and the PCTUSED parameter. 3. When the space falls below 40 %, Oracle will start adding new rows to the block.

You might also like