Секционирование данных времени выполнения
Разбиение на разделы таблицы value_stream в PostgreSQL (бета-версия)
Таблица value_stream с большим числом данных может вызвать связанные со временем запросы и операции очистки, занимающие значительное время в результате разбиения таблицы на разделы, и увеличить общую нагрузку на сервер. Наличие еженедельного или ежемесячного разбиения на разделы и соответствующих операций drop-partition упростит некоторые из этих текущих узких мест.
При получении больших объемов данных используйте опцию командной строки partition_value_stream_by_range_setting для разбиения таблицы value_stream на разделы, чтобы упростить управление диапазонами разбиения, в том числе временами начала или конца и интервалами разбиения. Эти операции включают в себя повторное разбиение на разделы старых данных и изменение времени начала, времени окончания и интервала.
Использование командной строки partition_value_stream_by_range_setting поддерживает следующие действия.
1. Добавление новых секций в существующую таблицу или секцию с минимальным временем простоя.
2. Повторное разбиение на разделы старых данных за указанное время или всех данных. Это может занять некоторое время.
3. Повторное разбиение на разделы с другой настройкой диапазона.
4. Использование раздела DEFAULT для хранения информации, если данные не принадлежат ни к одному разделу.
Для разбиения value_stream на разделы создайте периодические разделы. Используйте инструмент планировщика базы данных, чтобы обеспечить попадание всех данных, которые будут приняты впоследствии, в последующие секции.
Командная строка partition_value_stream_by_range_setting имеет следующие параметры.
Имя параметра
Описание
Значение по умолчанию
Комментарий
host
хост-компьютер базы данных
Требуется
port
порт базы данных
Требуется
database
имя базы данных, в которой существует таблица value_stream
Требуется
username
пользователь базы данных
Требуется
password
пароль базы данных
Требуется
partition_start_date
* 
Если предоставленные данные находятся в прошлом, это может привести к простою в зависимости от объема данных, которые необходимо разбить на разделы. Рекомендуется сначала выполнить это в тестовой среде и проанализировать все возможные простои. Если опцию partition_start_date оставить пустой, простоя не будет.
Определите, с какого момента времени нужно создавать разделы. Этот момент может быть в прошлом или в будущем.
Последнее значение столбца time в таблице value_stream. Если данных нет, используется текущая (current) дата начала.
Необязательно
Возможные форматы:
ДД.ММ.ГГГГ
ДД.ММ.ГГГГ ЧЧ:ММ
ГГГГ-ММ-ДД ЧЧ:ММ:СС
ДД.ММ.ГГГГ ЧЧ:ММ:СС.МС
partition_end_date
Определите, с какого момента нужно прекратить создание разделов.
Требуется
Возможные форматы:
ДД.ММ.ГГГГ
ДД.ММ.ГГГГ ЧЧ:ММ
ГГГГ-ММ-ДД ЧЧ:ММ:СС
ДД.ММ.ГГГГ ЧЧ:ММ:СС.МС
Этот момент должен быть в будущем и должен быть больше последнего значения столбца time плюс интервал. Если данных нет, то этот момент должен быть больше, чем текущее время плюс интервал.
partition_interval
Обязательный интервал для каждого раздела
Возможные форматы:
1 или n часов
1d или 1day
1 month
1y или 1year
repartition_all_data
Требуется
no
Возможные значения:
yes или no
Если задано значение yes (необязательно), сценарий будет игнорировать дату начала и повторно секционировать все данные
После выполнения действий в командной строке таблица value_stream разбивается на разделы в соответствии с параметрами, и данные помещаются в нужный раздел.
Чтобы использовать командную строку partition_value_stream_by_range_setting, выполните следующие действия.
1. Загрузите сценарий partition_value_stream_by_range_setting.sh. Запросите расположение загрузки на сайте support.ptc.com.
2. Скопируйте сценарий на сервер, соединенный с базой данных ThingWorx.
3. Откройте командную строку и выполните команду, как требуется, используя приведенные выше параметры.
Пример./partition_value_stream_by_range_setting.sh -host localhost -port 5432 -database thingworx -username DBA -password password -partition_start_date '2024-06-17 00:00:00.000' -partition_end_date '2025-06-17 00:00:00.000' -partition_interval '1 months'
* 
Чтобы предотвратить повторное предоставление каких-либо параметров, можно отредактировать сценарий и задать следующие параметры: DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD.
4. Поддерживайте ваши разделы. Например, создайте планировщик для добавления последующих разделов и архивирования или удаления старых. Однако большое число разделов может значительно увеличить время планирования запроса, поэтому не надо использовать несколько тысяч разделов.
Было ли это полезно?