Экстенты

Когда комбинируется несколько непрерывных блоков данных, они называются экстентом. Когда вы создаете объект базы данных вроде таблицы или индекса, вы выделяете им некоторый начальный объем пространства, называемый начальным экстентом, и, кроме того, указываете размер следующего экстента.

Однажды размещенные в таблице или индексе, экстенты остаются выделенными конкретному объекту, пока вы не удалите этот объект из базы данных Oracle - тогда пространство, занимаемое им, вернется в пул свободного пространства базы данных.

Расширение и сокращение экстента

Экстент Oracle состоит из набора непрерывных блоков данных, которые представляют собой мельчайшую единицу выделения пространства в Oracle. Каждый блок данных Oracle соответствует определенному числу байт дискового пространства. Каждая из таблиц и индексов вашей базы данных называется сегментом, который представляет собой набор экстентов, выделенных для определенной структуры данных. Обратите внимание, что экстенты всегда непрерывны в файле операционной системы, но не обязательно непрерывны на диске. Экстенты способствуют производительности за счет расширения возможности Oracle выполнять упреждающее чтение данных, необходимых запросу. Каждый раздел таблицы или индекса имеет свой собственный сегмент (а помимо табличных и индексных сегментов в базе данных Oracle также есть сегменты отката, временные сегменты и сегменты отмены).

Когда Oracle нуждается в выделении экстента сегменту, он сначала выбирает подходящий файл данных и ищет в его битовой карте необходимое количество соседних свободных блоков. Если их найти не удается, Oracle заглядывает в другой файл данных,а если их не остается — выдает ошибку, сообщающую об отсутствии свободного места.

Как только Oracle распределит пространство сегменту, выделив ему определенное число экстентов, это пространство остается в экстенте, если только вы не предпримете усилий для его возврата (deallocate). Если, например, вы усекаете таблицы опцией DROP STORAGE (TRUNCATE TABLE table_name DROP STORAGE), то Oracle сокращает выделенные экстенты. Вы можете также сделать это вручную, удалив неиспользуемые экстенты следующей командой:

SQL> ALTER TABLE table_name DEALLOCATE UNUSED; 

Когда Oracle освобождает экстенты, он автоматически модифицирует битовую карту в файле данных, где размещены эти экстенты, чтобы пометить, что они свободны и доступны для использования.

Параметры хранения

Помните, что экстенты — это единицы выделения пространства, когда создаете таблицы и индексы в табличных пространствах. Ниже описано, как Oracle определяет размеры и выделение экстентов при создании табличных пространств.

  • По умолчанию количество экстентов равно 1. Вы можете изменить это, специфицируя MINEXTENTS при создании табличного пространства.
  • Вам не нужно указывать параметр MAXEXTENTS для локально управляемых табличных пространств. Для них параметр MAXEXTENTS устанавливается в UNLIMITED, и вам вообще не следует его конфигурировать.
  • Если вы выберете размер экстента UNIFORM, то размер всех экстентов, включая первый, будет определяться размером, указанным вами.

Три примера создания табличных пространств с различными параметрами управления экстентами приведены в листингах с 6.1 по 6.3, и в запросах, которые следуют за операторами создания, вы увидите следующие заголовки.

  • Initial extent ( Начальный экстент). Этот параметр хранения определяет начальный объем пространства, выделяемого любому объекту, который вы создаете в табличном пространстве. Например, если вы специфицируете размер экстента UNIFORM равным 10 Мбайт, а значение INITIAL_EXTENT — 20 Мбайт, то Oracle создаст для нового объекта изначально два экстента по 10 Мбайт. Пример в листинге 6.1 показывает начальный размер экстента в 5 242 880 байт, на основе значения UNIFORM SIZE, которое составляет 5 Мбайт для табличного пространства.
  • Next extent (Следующий экстент). Параметр хранения NEXT_EXTENT определяет размер последующих экстентов, создаваемых после начальных.
  • Extent management (Управление экстентами). Этот столбец может показывать значение LOCAL или DICTIONARY для локально управляемых и управляемых словарем табличных пространств, соответственно.
  • Allocation type (Тип расширения). Этот столбец ссылается на способ расширения экстента, и может принимать значения UNIFORM для унифицированного расширения экстентов или SYSTEM — для опции AUTOALLOCATE.
  • Segment space management (Управление пространством сегментов). Этот столбец показывает способ управления пространством сегментов для табличного пространства, который может быть AUTO (по умолчанию) или MANUAL.

SQL> CREATE TABLESPACE test01
DATAFILE '/pasx02/oradata/pasx/test01_01.dbf' SIZE 100M
UNIFORM SIZE 5M;
Tablespace created.
SQL>
SQL> SELECT initial_extent,next_extent,
extent_management, allocation_type,segment_space_management
FROM dba_tablespaces;
INITIAL_EXTENT  NEXT_EXTENT    EXTENT_MAN   ALLOCATION_TYPE   SEGMENT_MAN
--------------  -----------    ----------   ---------------   ------------
5242880         5242880        LOCAL        UNIFORM           AUTO
SQL> 


Если для расширения экстентов выбрана опция UNIFORM, но не указан дополнительный параметр SIZE, то Oracle по умолчанию создаст унифицированные экстенты размером в 1 Мбайт, как показано в листинге ниже.


SQL> CREATE TABLESPACE test01
DATAFILE '/u09/oradata/test/test01.dbf' SIZE 100M
UNIFORM;
Tablespace created.
SQL>
SQL> SELECT initial_extent,next_extent,
extent_management,allocation_type,segment_space_management
FROM dba_tablespaces;
INITIAL_EXTENT NEXT_EXTENT EXTENT_MAN ALLOCATION_TYPE SEGMENT_MAN
-------------- ----------- ---------- --------------- ------------
1048576        1048576     LOCAL      UNIFORM         AUTO
SQL> 

Если вы выберете метод расширения экстентов AUTOALLOCATE, то Oracle начнет устанавливать размеры экстентов с минимальной величины в 64 Кбайт (65536 байт).Обратите внимание на возможность указания метода автовыделения для размеров экстентов — либо явно задавая его с помощью ключевого слова AUTOALLOCATE, либо просто опуская это слово вообще, поскольку по умолчанию Oracle все равно использует метод AUTOALLOCATE. В листинге ниже показан пример, создающий табличное пространство с управляемыми системой (автоматически выделяемыми) экстентами.


 

SQL> CREATE TABLESPACE test01
DATAFILE '/pasx02/oradata/pasx/test01_01.dbf' SIZE 100M;
Tablespace created.
SQL>
SQL> SELECT initial_extent,next_extent,
extent_management,allocation_type,segment_space_management
FROM dba_tablespaces;
INITIAL_EXTENT NEXT_EXTENT EXTENT_MAN ALLOCATION_TYPE SEGMENT_MAN
-------------- ----------- ---------- --------------- ------------
65536                      LOCAL      SYSTEM          AUTO
SQL>


Следует отметить, что в листинге выше не показано значение для автовыделения в табличном пространстве. Когда вы выбираете опцию AUTOALLOCATE (здесь она выбрана по умолчанию) вместо UNIFORM, Oracle выделяет размеры экстентов, начиная с 64 Кбайт для первого экстента. Размер следующего экстента будет зависеть целиком от требований к сегменту (таблиц, индексов и т.п.), которые вы создадите в этом табличном пространстве.

Вас заинтересует / Intresting for you:

Oracle и непроцедурный доступ ...
Oracle и непроцедурный доступ ... 8510 просмотров Antoni Tue, 21 Nov 2017, 13:32:50
Работа с запросами Approximate...
Работа с запросами Approximate... 2271 просмотров Андрей Васенин Mon, 29 Oct 2018, 06:40:46
Отмена сессий в Oracle (ALTER ...
Отмена сессий в Oracle (ALTER ... 23080 просмотров Stepan Ushakov Thu, 01 Nov 2018, 18:04:59
Видеокурс по администрированию...
Видеокурс по администрированию... 10719 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Войдите чтобы комментировать