Почему я не вижу всех преимуществ разделения таблиц на секции?
Эффективная стратегия секционирования таблиц требует глубокого понимания взаимосвязей и шаблонов доступа к данным, а также разработки стратегии секционирования, которая позволит оптимально распределить данные для обеспечения наилучшего обслуживания и производительности.
В настоящее время ваша компания демонстрирует устойчивый рост: ежедневно поступают новые заказы и заключаются сделки. При этом объём данных увеличивается с такой скоростью, что возникает желание, чтобы пенсионный счёт также рос с такой же скоростью.
Как администратор базы данных, вы рады, что объём базы данных достиг терабайтного уровня. Однако, помимо положительных моментов, есть и некоторые проблемы.
Возможно, вы заметили, что процесс «перестройки индекса» теперь занимает целый день вместо нескольких часов, как это было раньше. Работа с архивом данных стала ещё более трудоёмкой.
Более того, запросы выполняются медленнее, что вызывает недовольство со стороны руководства.
Настало время приступить к действиям.
Вы обсудили этот вопрос с коллегами, и они рассказали вам о новой функции в Progress OpenEdge — разделении таблиц. Вы подумали: «Да, я слышал об этом. Это отличная функция. Она позволяет разделить данные на более мелкие части, чтобы можно было использовать принцип «разделяй и властвуй». Самое интересное, что разделение таблиц также может ускорить выполнение запросов! Постойте-ка. Вы только что сказали, что Progess теперь поддерживает это в OpenEdge?» Это замечательно, я давно хотел воспользоваться этой функцией!
Итак, вы разделили свои данные на разделы, что оказалось довольно просто. Теперь обслуживание стало намного проще, а время простоя базы данных сократилось. Всё выглядит отлично, пока вам не начинают звонить и жаловаться, что производительность ухудшается!
В официальном документе, опубликованном компанией Progress, подробно рассматривается вопрос о производительности и стратегии секционирования таблиц.
Согласно результатам тестирования, правильно выбранная стратегия секционирования может значительно повысить производительность операций создания и удаления данных. В то же время, неправильно выбранная стратегия может привести к снижению производительности или даже замедлению работы.
В документе также отмечается, что эффективная стратегия повышения производительности зависит от равномерности распределения данных и характера доступа к ним. Важно понимать, что сбалансированное распределение данных само по себе не гарантирует высокую производительность, так как характер доступа к данным может быть различным.
В качестве примера рассматривается таблица «Заказы», которую можно разделить по дате заказа для равномерного распределения данных о продажах по годам, кварталам или месяцам. Однако раздел с самой актуальной датой заказа станет «горячей точкой» для создания записей, так как все новые записи с этой датой будут попадать в этот раздел.
Для решения этой проблемы предлагается изменить шаблон доступа, добавив ещё один столбец «регион», чтобы распределить данные ещё более равномерно. Теперь записи с одинаковой датой заказа могут попадать в разные разделы, так как они поступают из разных регионов.
Таким образом, правильно выбранная стратегия секционирования и распределение данных могут значительно повысить производительность операций с таблицами.
Использование других столбцов, таких как «код товара», в качестве ключа секционирования может обеспечить более равномерное распределение данных. Однако можно возразить, что секционирование по дате заказа лучше подходит для вашей бизнес-модели, поскольку большинство отчётов и операций по обслуживанию основаны на этом значении, а не на «коде товара».
Вопрос заключается в том, как спроектировать секционирование таблиц таким образом, чтобы воспользоваться всеми преимуществами, о которых говорят эксперты. Например, требуется обеспечить максимальную производительность и простоту обслуживания.
На этот вопрос нет однозначного ответа. В некоторых случаях может потребоваться пожертвовать удобством управления данными или их доступностью, если производительность является приоритетом. Однако во многих других случаях разделение на подразделы может быть хорошим выбором для удовлетворения различных потребностей.
Однако я рекомендую не создавать слишком много подразделов в одной таблице, так как это может привести к трудностям в управлении данными.
Мой совет — изучить взаимосвязи между вашими данными и схемы доступа к ним, а затем разработать стратегию разделения данных, которая позволит распределить их для достижения наилучших возможностей обслуживания и производительности.
Приглашаем вас принять участие в бесплатном онлайн-тренинге «OpenEdge Table Partitioning», который позволит вам самостоятельно изучить основы горизонтального разделения таблиц в OpenEdge.