Каталог решений - Секционирование в PostgreSQL 12

Секционирование в PostgreSQL 12

Секционирование в PostgreSQL 12

В наличии

Протестируем новый функционал секционирования в PG12.

Категория:

Описание

Важно

  Данный материал не несет рекомендательный характер, а только ознакомительный. Все, что будет описано ниже, это следствие свободного времени на самоизоляции и желания познать новое. Еще две недели назад максимум, что я делал в PostgreSQL это правил настройки согласно различным рекомендациям в интернете. Следуя из выше описанного, в данной статье могут присутствовать ошибки и работы на рабочей базе могут привести к необратимым последствиям. Цель публикации осветить новый функционал в PG12. Надеюсь, появятся новые статьи от более опытных администраторов. (например: YPermitin).

Пояснения и определения

  Вкратце для тех, кто не знает, что такое секционирование и для чего оно необходимо. Секционированием данных называется разбиение одной большой логической таблицы на несколько меньших физических секций. Какая польза от секционирования?

  • При разделении таблицы на несколько мелких, можно актуальные данные выносить на отдельный жесткий диск.
  • Несколько раз в день принудительно просчитывать по ним статистику.
  • Если есть необходимость перестроить индекс в технологическое окно, то можно сделать только на данных, которые чаще используются.(Хотя с выходом 12 версии это можно делать не в монопольном режиме прям на рабочей базе.).
  • Закрыть на уровне СУБД редактирование таблиц старых периодов и 100% быть уверенным, что пользователи не отредактируют данные за прошлые года.

  Где-то мною было прочитано, что секционирование актуально когда размер таблицы около 30 ГБ, так что большинству изложенная ниже информацию вряд ли пригодится (мне кстати  тоже в работе это не понадобится).

  Задумка заключается в следующем: в чистой базе мы создадим два идентичных оборотных регистра накопления. Таблицу одного из регистров разобьем на более мелкие секции. Наполним таблицу данными (несколько десятков миллионов строк), а затем сравним скорости записи и чтения по этим регистрам. Постараюсь описать выполняемые мною действия максимально подробно, так как опыта в написании статей нет, может получится слишком объемно 🙂

 

Используемые инструменты и материалы

Параметры PostgreSQL

shared_buffers 1 GB
temp_buffers256 MB
work_mem256 MB
maintenance_work_mem1 GB
wal_sync_methodopen_datasync
max_wal_size 10 GB
effective_cache_size4 GB
autovacuum_max_workers 2
autovacuum_vacuum_cost_limit800
autovacuum_vacuum_scale_factor0.01
autovacuum_analyze_scale_factor0.01
max_locks_per_transaction512
enable_partition_pruning on  
bytea_output‘hex’

 

Начнем

Оглавление

  1. Создание базы 1с для теста
  2. Определение структуры секционирования
  3. Написания и выполнение скриптов 

    4. Тестирование произведенной модернизации

Создание базы 1с для теста

   В новой базе создадим 2 оборотных регистра накопления.  Регистры будут иметь следующую структуру:

 

  В первом регистре в измерениях "Подразделение" и "Поле" установим признак "Индексировать", во втором этого делать не будем, так-как индексы будем настраивать в PostgreSQL. Далее создадим 5 элементов в справочнике "Подразделение", 100 элементов "Поля" и 20 Элементов "Статья затрат". Работая в сфере "Сельского хозяйства", мне проще привести пример из данной области. В данных регистрах будем собирать затраты рабочих бригад на каждое поле.

   Следующим шагом будет создание документов для формирования движений по этим регистрам. 

 

has been added to your cart:
Оформление заказа