Основы проектирования реляционных баз данных



Повышение производительности запросов: Кластеры - часть 2


Совместное хранение строк родительской и дочерней таблиц может значительно ускорить выполнение соединения этих таблиц.

Пример. Рассмотрим таблицы DEPARTAMENT и EMPLOYEE нашей учебной базы данных. Они некластеризованы и хранятся каждая на своих физических страницах. Предположим, что анализ запросов показывает, что в 80% запросов эти таблицы используются совместно, при этом соединение выполняется по колонке DEPNO. Проектировщик базы данных может решить построить кластер для этих двух таблиц. На рисунке ниже показана концептуальная сторона такого решения.

До кластеризации строки из таблиц сохраняются отдельно в своих физических областях на диске.

DEPARTMENT
DEPNODNAMELOC
10ТорговляМосква
20КонсалтингЧерноголовка
EMPLOYEE
EMPNOENAMELNAMEDEPNO
996КозыревСергей10
997СапегинАлексей20

После кластеризации по колонке DEPNO строки таблиц будут сохраняться совместно, разделяя одни и те же физические страницы базы данных.

CLUSTER
DEPNO
10DNAMELOC
ТорговляМосква
EMPNOENAMELNAME
996КозыревСергей
20DNAMELOC
КонсалтингЧерноголовка
EMPNOENAMELNAME
997СапегинАлексей

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

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

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

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

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




Содержание  Назад  Вперед