22 февраля 2011 г.

oracle: datablock, extent, segment

Хорошая статья Формат блока в ORACLE

Storage Hierarchy Summary
In summary, the hierarchy of storage in Oracle is as follows:
1. A database is made up of one or more tablespaces.
2. A tablespace is made up of one or more data files. These files might be cooked
files in a file system, raw partitions, ASM managed database files, or a file on a
clustered file system. A tablespace contains segments.
3. A segment (TABLE, INDEX, and so on) is made up of one or more extents. A
segment exists in a tablespace, but may have data in many data files within
that tablespace.
4. An extent is a logically contiguous set of blocks on disk. An extent is in a single
tablespace and, furthermore, is always in a single file within that tablespace.
5. A block is the smallest unit of allocation in the database. A block is the smallest
unit of I/O used by a database.


Segment Space Managment
Manual - вручную устанавливаются параметры FREELISTS, FREELIST GROUPS, PCTUSED и другие.
Automatic (ASSM) - устанавливается только один параметр PCTFREE. ASSM появился в Oracle 9i.


PCTUSED -  процент заполнения блока данных, выше которого блок считается заполненным
PCTFREE -  процент свободного места в блоке данных, которое удерживается на случай дальнейших апдейтов строк в этом блоке.


Например, возьмём чистый блок (данные никогда ранее в него не вставлялись или он помечен как free, т.к. кол-во данных меньше PCTUSED)  PCTUSED=40%, PCTFREE=10%. Статус блока FREE, данные в этот блок вставляются пока не останется свободными в блоке PCTFREE=10%, после этого статус блока USED и он теперь не доступен для вставки новых строк. Потом из этого блока удалили часть данных и если после этого блок стал заполнен менее, чем на PCTUSED=40%, то статус блока становится FREE и блок становится доступным для вставки новых строк.