ThingWorx 模型和数据最佳做法 > 数据管理 > 对运行时数据进行分区 > 在 PostgreSQL 中对 value_stream 表进行分区
在 PostgreSQL 中对 value_stream 表进行分区
包含大量数据的 value_stream 表可能会导致基于时间的查询和清除操作因扫描所产生的表而花费大量时间,并会增加整个服务器负载。每周或每月进行分区和匹配 drop-partition 操作将简化一部分当前这类瓶颈。
对于大规模数据提取,使用 partition_value_stream_by_range_setting 命令行对 value_stream 表进行分区,以轻松控制分区范围,例如,分区开始和结束时间以及分区间隔。这包括重新分区旧数据以及更改开始时间、结束时间或间隔时间。
* 
出于恢复目的,请在启动分区过程之前复制或备份数据库。
使用 partition_value_stream_by_range_setting 命令行可支持以下功能:
1. 以最短停机时间将新分区添加到现有表或分区。
2. 重新分区特定时间的旧数据。执行此操作可能需要一些时间。
3. 使用不同范围设置重新分区。
4. 如果数据不属于任何分区,则使用“默认”分区来存储信息。
要对 value_stream 表进行分区,请创建周期分区。使用数据库计划程序工具以确保所有未来注入的数据都将进入下一个分区。
partition_value_stream_by_range_setting 命令行包含以下参数:
参数名称
说明
默认值
备注
host
数据库主机
必填
port
数据库端口
必填
database
value_stream 表所在的数据库的名称
必填
username
数据库用户
必填
password
数据库密码
必填
partition_start_date
* 
如果提供过去的数据,可能会导致停机,具体取决于需要分区的数据量。建议首先在测试环境中执行此操作,然后分析任何潜在的停机。如果将 partition_start_date 留空,则不会出现停机。
定义要创建的分区的开始时间点。该时间点可以是过去时间,也可以是未来时间。
value_stream 表中“时间”列的最后一个值。如果没有数据,则开始日期=当前。
可选
可能的格式:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.MS
partition_end_date
定义要停止创建分区的时间点。
必填
可能的格式:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.MS
必须是未来时间,并且至少大于“时间”列的最后一个值加上间隔。如果没有数据,则它必须大于当前时间 + 间隔。
partition_interval
每个分区的间隔 (必填)
可能的格式:
1h 或 hours
1d 或 1day
1 month
1y 或 1year
future_data_exists
可选
no
可能的值:
yes 或 no
如果 = yes (可选),脚本支持将来对数据进行分区
执行命令行后,将根据参数对 value_stream 表进行分区,且会将数据推送到正确的分区。
要使用 partition_value_stream_by_range_setting 命令行,请执行以下操作:
1. 转至 PTC 软件下载网站,导航至 ThingWorx PostgreSQL 文件夹,然后下载 partition_value_stream_by_range_setting.sh 脚本。
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. 维护分区。例如,创建计划程序以添加未来分区并存档或删除旧分区。但是,大量分区会显著增加查询计划时间,因此请避免使用数以千计的分区。
这对您有帮助吗?