Для фрагментации

Оценить
(0 голоса)

Для фрагментации необходимо тщательное планирование, поскольку степень параллелизма табличного сканирования определяется количеством пространств БД, оставшихся после исключения фрагментов. При исключении слишком большого числа фрагментов может пострадать производительность параллельного запроса. Выход состоит в конфигурировании достаточного количества пространств для каждого слай-са БД; количество пространств БД, оставшихся после исключения фрагментов, определит количество потоков сканирования, а значит и степень параллелизма.

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

Informix XPS поддерживает следующие механизмы фрагментации:

•             Round-robin fragmentation (Фрагментация типа "карусель"). Данные по очереди назначаются каждому взаимодействующему серверу. Такая стратегия не рекомендуется, поскольку при этом отсутствует возможность исключения фрагментов. При разделении типа "карусель" XPS не может установить, какой взаимодействующий сервер владеет определенной строкой - необходимо просканировать все строки всех взаимодействующих серверов.

•             Range fragmentation (Фрагментация по диапазону). Значения распределяются среди взаимодействующих серверов в соответствии со значениями определенного столбца. В результате при табличном сканировании могут быть полностью исключены некоторые взаимодействующие серверы, что вызывает дисбаланс доступа к системным ресурсам.

•             Expression-based fragmentation (Фрагментация на основе выражения). Данные вставляются в слайс БД в соответствии с правилом, определенным пользователем - часто на основании диапазонного выражения. Такое выражение определяет тот взаимодействующий сервер, в котором будут размещены данные. Подобный механизм может в результате привести к отклонению (к перекосу) данных между взаимодействующими серверами и таким образом к неравномерному параллелизму.

•             Hash fragmentation (Хэш-фрагментация). Алгоритм внутреннего хэширования используется в определенных столбцах для распределения строк. При хэш-фрагментации становятся невозможными исключения фрагментов, однако хэш-фрагментация позволяет равномерно распределить строки среди взаимодействующих серверов, что приводит к сбалансированному параллелизму. Хэш-распределение является хорошим выбором для тех таблиц, которые сами не организовывают исключения фрагментов. Хэш-фрагментация также важна и для сосредоточенных объединений (описываются позже в этой главе).

Следующий пример иллюстрирует синтаксическое выражение для создания таблицы на основе хэш-разделения:

create table customer ( c_id integer, c_name varchar(50), c_address varchar(50), c_account_balance decimal(12,2)

) fragment by hash (c_id) in dbother lock mode table;

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

•             Hybrid fragmentation (Гибридная фрагментация). Этот метод обладает преимуществами хэш-фрагментации и фрагментации по диапазону. Для хэш-фрагмен-тации и фаз фрагментации по диапазону указываются различные столбцы.

Фрагменты могут быть исключены на основании ключа диапазона одновременно по всем взаимодействующим серверам. Далее приводится пример.

create table order ( o_id integer,

o_total_value decimal(12,2), o_order_date date ) fragment by hybrid(o_id) expression o_order_date < 2001-04-01 in o_qtrl, o_order_date >= 2001-04-01

and o_order_date < 2001-07-01 in o_qtr2, o_order_date >= 2001-07-01

and o_order_date < 2001-10-01 in o_qtr3, o_order_date >= 2001-10-01

and o_order_date <= 2001-12-31 in o_qtr4 lock mode table;

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

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

Табличные пространства
Системная БД
Параллельная обработка
Сосредоточенные объединения
Модель процессов  Informix XPS

Добавить комментарий


Защитный код
Обновить