Практическое занятие
Секционирование
Преимущества секционирования
Преимущества секционирования
Преимущества секционирования
Преимущества секционирования
Секционирование таблиц
Секционирование таблиц
Секционирование таблиц
Секционирование таблиц
Секционирование таблиц
Секционирование таблиц
Секционирование индексов
Секционирование индексов
Секционирование индексов
Секционирование индексов
208.88K

Практическое занятие СУБД Oracle

1. Практическое занятие

СУБД Oracle

2. Секционирование

Секционирование (partitioning) – это процесс физического разбиения таблицы
или индекса на множество мелких, более управляемых частей.
Логически существует одна таблица или один индекс, но физически таблица и
индекс могут состоять из многих десятков физических секций. Каждая секция (partition)
является независимым объектом, которым можно манипулировать либо отдельно, либо
в качестве части более крупного объекта.
Ключ секционирования (partitioning key) – набор столбцов, которые
определяют,
в
какую
секцию
будет
попадать
та
или
иная
строка.
Ключ
секционирования используется для разделения данных на основе определенных
диапазонов значений, списка специфических значений или значений хеш-функции.

3. Преимущества секционирования

Повышение доступности данных. Повышенная доступность происходит от
независимости каждой секции. Доступность (или ее нехватка) одиночной секции
объекта не означает, что сам объект является недоступным. Оптимизатору известна
имеющаяся схема секционирования, и он соответствующим образом исключит секции,
на которые нет ссылок, из плана выполнения запроса. Если в крупном объекте одна
секция недоступна, а запрос может исключить ее из рассмотрения, то Oracle успешно
обработает запрос. Доступность увеличивается двумя путями:
o Исключение секций оптимизатором означает, что многие пользователи могут вообще не
заметить недоступность каких-то данных.
o В случае возникновения ошибки время простоя сокращается, потому что восстановление
потребует значительно меньшего объема работ.

4. Преимущества секционирования

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

5. Преимущества секционирования

Улучшение производительности некоторых запросов. Главным образом полезно в среде крупного
хранилища данных, где секционирование можно применять для исключения из процесса анализа значительных
диапазонов данных, полностью избегая доступа к ним. Такой прием не особенно подходит для транзакционной
системы, поскольку в ней и без того происходит обращение к небольшим объемам данных.
Операторы, которые модифицируют данные в базе, могут обладать потенциалом выполнения в виде
параллельного DML (parallel DML – PDML). Во время PDML база данных Oracle использует множество потоков
или процессов для выполнения операторов INSERT, UPDATE, DELETE или MERGE вместо единственного
последовательного процесса. На многопроцессорной машине с достаточной пропускной способностью вводавывода потенциальное увеличение скорости может быть большим для массовых операций DML.
В области производительности запросов, выполняющих строго чтение (операторы SELECT), два типа
специализированных операций:
o
o
Исключение секций. Некоторые секции данных при обработке запроса не принимаются во внимание.
Параллельные операции. Примерами могут служить параллельное полное сканирование таблиц и параллельное сканирование диапазонов
индекса.

6. Преимущества секционирования

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

7. Секционирование таблиц

Секционирование по диапазонам ключей (range partitioning).
Можно указать диапазоны данных, которые должны храниться вместе.
Например, все, что имеет отметку времени в пределах различных
заданных периодов времени разбивается на различные секции. При
секционировании по диапазонам ключей администратор базы данных
обязан предварительно создать секции для хранения каждого
возможного значения данных, как в текущий момент, так и в будущем.
Хеш-секционирование (hash partitioning). К столбцу (или
столбцам) применяется хеш-функция, и строка будет помещена в
секцию согласно значению, возвращаемому этой хеш-функцией.

8. Секционирование таблиц

Секционирование по списку значений ключа (list partitioning).
Указывается дискретный набор значений, определяющий данные, которые
должны храниться вместе.
Секционирование по интервалам ключей (interval partitioning).
Очень похоже на секционирование по диапазонам ключей, но с тем
отличием, что база данных сама может создавать новые секции по мере
поступления данных. При секционировании по интервалам ключей база
данных будет самостоятельно создавать секции, когда появляются новые
данные, которые не умещаются в существующие секции, на основе правила,
указанного администратором базы данных.

9. Секционирование таблиц

Секционирование по ссылкам (reference partitioning). Позволяет дочерней
таблице в рамках отношения «родительская-дочерняя», обеспечиваемого внешним
ключом, наследовать схему секционирования родительской таблицы. Делает
возможным эквисекционирование дочерней таблицы по ее родительской таблице, без
необходимости в денормализации модели данных. Секционирование по ссылкам по
существу позволяет секционировать таблицу на основе атрибутов из родительской
таблицы.
Секционирование по интервалам ключей и по ссылкам (interval reference
partitioning). Комбинация секционирования по интервалам ключей и секционирования
по ссылкам. Он делает возможным автоматическое добавление секций к родительским
и дочерним таблицам, секционированным по ссылкам. Доступен, начиная с версии
Oracle 12c.

10. Секционирование таблиц

Секционирование по виртуальному столбцу (virtual column
partitioning). Позволяет секционировать по выражению, основанному на
одном или большем количестве существующих столбцов таблицы.
Выражение хранится только как метаданные.
Составное
секционирование
(composite
partitioning).
Комбинация
секционирования
по
диапазонам
ключей,
хешсекционирования и секционирования по списку значений ключа.
Позволяет сначала применить одну схему секционирования к некоторым
данным, а затем дополнительно разбить каждую результирующую секцию
на подсекции с использованием какой-то другой схемы секционирования.

11. Секционирование таблиц

Системное секционирование (system partitioning). Приложение
определяет, в какую секцию будет явно вставляться строка. База данных
просто позволяет разделить таблицу на разделы, не имея никакого
представления относительно того, что будет содержать каждый из
разделов. Приложение управляет тем, что попадает в каждый раздел. При
вставке данных в таблицу с системным секционированием необходимо
явно специфицировать раздел. Самое большое преимущество
использования системного секционирования состоит в том, что можно
создавать и поддерживать пропорциональное секционирование таблиц в
зависимости от базовой таблицы.

12. Секционирование таблиц

Представления USER, ALL и DBA:
..._TABLES – информация о таблицах, в том числе и секционированных;
..._PART_TABLES – информация о секционированных таблицах;
..._TAB_PARTITIONS – информация о табличных секциях;
..._PART_KEY_COLUMNS – информация о ключах секционирования;
..._SEGMENTS – информация о сегментах хранения, в том числе о секциях;
..._OBJECTS – информация об объектах базы данных, в том числе о
таблицах и секциях.

13. Секционирование индексов

Локальный индекс – это индекс секционированной таблицы, связанный со
своей секционированной таблицей. Он «наследует» стратегию секционирования этой
таблицы. Следовательно, каждая секция локального индекса соответствует однойединственной секции базовой таблицы. Такая связь оптимизирует управление
секциями. Локальные индексы наиболее распространены в средах хранилищ данных.
o Локальные префиксные индексы (local prefixed index). Это индексы, в которых ключи
секционирования находятся в головной части определения индекса. Например, если
таблица секционирована по диапазонам с применением столбца, то локальный
префиксный индекс должен иметь этот столбец в качестве первого столбца в своем
списке столбцов.
o Локальные непрефиксные индексы (local nonprefixed index). Эти индексы не содержат
ключ секционирования в головной части своего списка столбцов. Индекс может
содержать, а может и не содержать столбцов ключа секционирования.

14. Секционирование индексов

Глобально секционированный индекс (global partitioned index) – это индекс
секционированной или несекционированной таблицы, который секционирован по другому ключу
секционирования или использует отличную от своей таблицы стратегию секционирования. Глобально
секционированные индексы могут секционироваться по диапазону значений ключа или методом хешсекционирования и их секционирование не связано с секционированием базовой таблицы. Отделение
индекса от его таблицы автоматически означает, что любая операция обслуживания секции таблицы может
потребовать операций обслуживания индекса. Глобально секционированные индексы чаще используются в
средах OLTP, чем в средах хранилищ данных.
Глобальный несекционированный индекс (global non-partitioned index) по существу подобен
индексу несекционированной таблицы. Структура индекса не секционирована и отделена от
секционирования базовой таблицы. В средах хранилищ данных глобальные несекционированные индексы
чаще всего используются для обеспечения ограничений первичного ключа. OLTP окружения, с другой
стороны, в основном полагаются на глобальные несекционированные индексы.

15. Секционирование индексов

Полная индексация (full indexing) – индексы создаются для
всех секций секционированной таблицы.
Частичная индексация (partial indexing) – индексы
создаются только для поднабора секций секционированной таблицы.
Доступна, начиная с Oracle Database 12c. Частичными индексами могут
быть только индексы секционированных таблиц. Будет ли индексироваться
конкретная секция, определяется свойствами секции, и результат
применяется ко всем частичным индексам.
Часто не производится индексация вновь созданной секции, чтобы
не выполнять работу по обслуживанию индекса во время вставки данных.
Частичные индексы позволяют отключать индекс на время загрузки данных
в секцию таблицы (в итоге увеличивая скорость загрузки), а затем позже
перестроить частичный индекс, чтобы сделать его доступным.

16. Секционирование индексов

Представления USER, ALL и DBA:
..._INDEXES – информация об индексах, в том числе и секционированных;
..._PART_INDEXES – информация о секционированных индексах;
..._IND_PARTITIONS – информация об индексных секциях;
..._IND_KEY_COLUMNS – информация о ключах секционирования для
индексов;
..._SEGMENTS – информация о сегментах хранения, в том числе о секциях;
..._OBJECTS – информация об объектах базы данных, в том числе о
индексах и секциях.
English     Русский Rules