Oracle DBA Forum  

Вернуться   Oracle DBA Forum > Работа > Архитектура

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 17.11.2009, 11:38
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию Сегменты, экстенты и блоки Oracle

Сегменты, экстенты и блоки Oracle

Сегмент состоит из одного или нескольких экстентов, а каждый экстент из одного или большего количества блоков данных.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #2  
Старый 17.11.2009, 11:46
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию Блоки данных

Блоки данных

Блок данных (data block) является наименьшей единицей хранения в базе данных. В идеале блок данных Oracle должен быть кратен блоку операционной системы, чтобы быть уверенным в эффективности операций ввода/вывода.

Используемый по умолчанию размер блока данных базы данных определяется значением параметра инициализации DB_BLOCK_SIZE; этот размер блока применяется для табличных пространств SYSTEM, TEMP и SYSAUX при создании базы данных и не может быть изменен без повторного создания базы данных.
В каждом блоке данных есть заголовок (header), который определяет, какие именно данные хранятся в блоке данные или индексы. В разделе со списком указателей таблиц (table directory) содержится информация относительно строк таблицы в этом блоке; в блоке могут содержаться строки или элементы индекса только из одной таблицы, за исключением случаев кластеризованных таблиц, когда в списке указателей идентифицируются все таблицы, строки которых попали в этот блок. Список указателей строк в блоке данных (row directory) предлагает подробности относительно конкретных строк таблицы или элементов индекса, хранящихся в блоке.

Дисковое пространство для заголовка, списка указателей таблицы и списка указателей строк составляет очень малый процент от пространства, выделенного для блока, поэтому мы сосредоточим свое внимание па свободном пространстве (free space) и данных строк (row data) в блоке.

В новом только что выделенном блоке данных имеется свободное пространство для записи новых и обновления существующих (ранее записанных) строк; обновления могут как увеличивать, так и уменьшать размер выделенного для строки пространства в тех случаях, когда в строке есть столбцы переменной длины или не пустое значение (non-NULL) было заменено пустым (NULL) или наоборот. Пространство для новых вставок будет доступно в блоке до тех пор, пока не будет превышен процент доступного в блоке пространства, определяемый параметром PCTFREE, который устанавливается при создании сегмента. Если размер свободного пространства в блоке оказывается меньшим, чем PCTFREE. вставки в этот блок более не разрешаются. Если для управления пространством в блоках сегмента используются списки свободной памяти, новые вставки в таблицу будут разрешены только после того, как размер свободного пространства в блоке упадет ниже PCTUSED.

Если размер строки превышает размер блока или если обновленная строка более не умещается в первоначальном блоке (т. е. в том блоке, где она размещалась до обновления.), строка может занимать более одного блока. В первом случае слишком большая для данного блока строка сохраняется в цепочке (chain) блоков; это может оказаться неизбежным, когда строка содержит столбцы, размер которых превосходит самый большой разрешенный в Oracle 10g размер блока (для Oracle 10g 32 Кбайт).

Во втором случае строка может перестать укладываться в первоначальный блок после обновления, в результате чего Oracle будет вынуждена осуществить миграцию (перенос) данных для всей строки в новый блок, а в первом блоке оставить указатель, чтобы показать место размещения второго блока, в котором теперь хранятся данные обновленной строки. Нетрудно догадаться, что у сегмента с большим количеством перемещенных строк могут возникнуть проблемы с производительностью, поскольку число блоков, к которым необходимо получить доступ, чтобы выполнить запрос, может возрасти чуть ли не вдвое. В некоторых случаях настройка значения PCTFREE или перестройка таблицы могут привести к улучшению использования дискового пространства и повышению производительности ввода/вывода.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #3  
Старый 17.11.2009, 11:55
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию Экстенты

Экстенты

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

При создании таблицы для нее выделяется экстент initial (первоначальный). После того как все пространство в первоначальном экстенте израсходовано, будут выделены экстенты incremental (дополнительные). В локально управляемых табличных пространствах эти последующие экстенты могут быть либо того же самого размера (если при создании табличного пространства было использовано ключевое слово UNIFORM), или же Oracle выберет для него оптимальный размер (AUTOALLOCATE). Если размер экстентов был выбран оптимальным образом, Oracle начнет с минимального размера экстента в 64 Кбайт и будет постепенно увеличивать размер последующих экстентов, чтобы они были кратными первоначальному. При таком сценарии развития событий фрагментация табличного пространства сводится к нулю.

Если размеры экстентов автоматически устанавливаются Oracle, параметры INITIAL, NEXT, PCTINCRFASE и MINEXTENTS используются только как "руководящие указания", с учетом которых по внутренним алгоритмам Oracle определяются наилучшие размеры сегментов.
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 17.11.2009 в 12:54.
Ответить с цитированием
  #4  
Старый 17.11.2009, 12:33
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,211
По умолчанию Сегменты

Сегменты

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

Временные сегменты выделяются по множеству сценариев. Когда операция сортировки не может быть выполнена в оперативной памяти, как это, например, происходит в операторе select, в котором необходимо отсортировать данные, чтобы выполнить операции distinct, group by или union, для хранения промежуточных результатов сортировки выделяется временный сегмент. Поскольку выделение и освобождение временных сегментов происходит часто, было бы в высшей степени желательно создать табличное пространство, специально предназначенное для хранения временных сегментов. Это помогает распределить запросы па ввод/вывод, необходимые для этой операции, а также сократить возможность фрагментации в других табличных пространствах, обусловленной постоянным выделением и освобождением временных сегментов. При создании базы данных можно для каждого нового пользователя, которому не назначено явно конкретное временное табличное пространство, создать используемое но умолчанию временное табличное пространство; если табличное пространство SYSTEM сделано локально управляемым, для храпения временных сегментов должно быть создано отдельное табличное пространство.

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

Если сегмент создается с автоматическим управлением пространством в сегментах, для управления этим пространством используются битовые карты. В результате ключевые слова pctused, freelist и freelist groups в операторах create table и create index игнорируются. Трехуровневая структура битовой карты внутри сегмента указывает, являются ли размещенные ниже HWM блоки полными (заполненными более чем на pctfree), свободными: от 0 до 25%, от 25 до 50%, от 50 до 75%, от 75 до 100%, или неотформатированными.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
Ответ

Метки
блоки данных, сегменты, экстенты

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 06:56. Часовой пояс GMT +3.


Powered by vBulletin®