Timescale Cloud:性能、规模、企业级
自托管产品
MST
通过先迁移模式,再迁移数据的方式来迁移大型数据库。此方法可独立复制每个表或块,如果某个复制操作失败,您可以从中途重新开始。
注意
对于小型数据库,一次性迁移整个数据库可能更方便。有关更多信息,请参阅选择迁移方法部分。
警告
此方法不会保留使用已删除数据计算的连续聚合。例如,如果您在一个月后删除了原始数据,但将降采样数据在连续聚合中保留了一年,则迁移后,连续聚合会丢失所有早于一个月的数据。如果您必须保留使用已删除数据计算的连续聚合,请一次性迁移整个数据库。有关更多信息,请参阅选择迁移方法部分。
迁移数据库需要以下步骤
警告
根据您的数据库大小和网络速度,涉及复制数据的步骤可能需要很长时间。在此期间,您可以继续从源数据库读取数据,但性能可能会变慢。为避免此问题,请分叉您的数据库并从分叉中迁移数据。如果您在迁移期间写入源数据库中的表,则新写入的数据可能不会传输到 Timescale。为避免此问题,请参阅迁移活动数据库部分。
开始之前,请检查您是否已完成以下操作:
- 安装 PostgreSQL
pg_dump
和
pg_restore
工具。
- 安装了用于连接 PostgreSQL 的客户端。这些说明使用
psql
,但任何客户端都可以。 - 在 Timescale 中创建了一个新的空数据库。有关更多信息,请参阅安装 Timescale 部分。为您的数据库配置足够的空间来存储所有数据。
- 检查您使用的任何其他 PostgreSQL 扩展是否与 Timescale 兼容。有关更多信息,请参阅兼容扩展列表。安装您的其他 PostgreSQL 扩展。
- 检查 Timescale 和源数据库上运行的 PostgreSQL 主要版本是否相同。有关在源数据库上升级 PostgreSQL 的信息,请参阅自托管 TimescaleDB 升级说明和TimescaleDB 托管服务
。
- 检查您的目标数据库和源数据库上运行的 Timescale 主要版本是否相同。有关更多信息,请参阅升级 Timescale 部分。
将预数据从源数据库迁移到自托管 TimescaleDB。这包括表和模式定义,以及有关序列、所有者和设置的信息。这不包括 Timescale 特定的模式。
使用源数据库连接详情,将源数据库的预数据模式转储到 `dump_pre_data.bak` 文件中。排除 Timescale 特定的模式。如果提示输入密码,请使用源数据库凭据
pg_dump -U <SOURCE_DB_USERNAME> -W \-h <SOURCE_DB_HOST> -p <SOURCE_DB_PORT> -Fc -v \--section=pre-data --exclude-schema="_timescaledb*" \-f dump_pre_data.bak <DATABASE_NAME>使用您的 Timescale 连接详情,将 `dump_pre_data.bak` 文件中的转储数据恢复到 Timescale 数据库。为避免权限错误,请包含 `--no-owner` 标志
pg_restore -U tsdbadmin -W \-h <HOST> -p <PORT> --no-owner -Fc \-v -d tsdb dump_pre_data.bak
预数据迁移后,源数据库中的超表在 Timescale 中会变成普通的 PostgreSQL 表。在 Timescale 中重新创建超表以恢复它们。
连接到您的 Timescale 数据库
psql "postgres://tsdbadmin:<PASSWORD>@<HOST>:<PORT>/tsdb?sslmode=require"恢复超表
SELECT create_hypertable('<TABLE_NAME>',by_range('<COLUMN_NAME>', INTERVAL '<CHUNK_INTERVAL>'));
注意
by_range 维度构建器是 TimescaleDB 2.13 的一个新增功能。
恢复超表后,返回源数据库,逐表复制数据。
连接到您的源数据库
psql "postgres://<SOURCE_DB_USERNAME>:<SOURCE_DB_PASSWORD>@<SOURCE_DB_HOST>:<SOURCE_DB_PORT>/<SOURCE_DB_NAME>?sslmode=require"将第一个表的数据转储到 `.csv` 文件中
\COPY (SELECT * FROM <TABLE_NAME>) TO <TABLE_NAME>.csv CSV对要迁移的每个表和超表重复此操作。
注意
如果您的表非常大,您可以将每个表分多部分迁移。按时间范围拆分每个表,并单独复制每个范围。例如
\COPY (SELECT * FROM <TABLE_NAME> WHERE time > '2021-11-01' AND time < '2011-11-02') TO <TABLE_NAME_DATE_RANGE>.csv CSV
将数据复制到 `.csv` 文件后,您可以通过从 `.csv` 文件复制来将其恢复到 Timescale。有两种方法:使用常规 PostgreSQL COPY
,或使用 TimescaleDB
timescaledb-parallel-copy
函数。在测试中,
timescaledb-parallel-copy
快了 16%。timescaledb-parallel-copy
工具默认不包含。您必须安装该函数。
重要
由于 COPY
会解压缩数据,源数据库中的任何压缩数据现在都以未压缩的形式存储在 `.csv` 文件中。如果您为压缩数据预配了 Timescale 存储,则未压缩数据可能会占用过多存储。为避免此问题,请在复制数据时定期重新压缩数据。有关压缩的更多信息,请参阅压缩部分。
在命令提示符下,安装
timescaledb-parallel-copy
go get github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy使用
timescaledb-parallel-copy
将数据导入 Timescale 数据库。将<NUM_WORKERS>
设置为数据库 CPU 数量的两倍。例如,如果您的数据库有 4 个 CPU,则<NUM_WORKERS>
应为8
。timescaledb-parallel-copy \--connection "host=<HOST> \user=tsdbadmin password=<PASSWORD> \port=<PORT> \dbname=tsdb \sslmode=require" \--table <TABLE_NAME> \--file <FILE_NAME>.csv \--workers <NUM_WORKERS> \--reporting-period 30s对要迁移的每个表和超表重复此操作。
连接到您的 Timescale 数据库
psql "postgres://tsdbadmin:<PASSWORD>@<HOST>:<PORT>/tsdb?sslmode=require"将数据恢复到您的 Timescale 数据库
\copy <TABLE_NAME> FROM '<TABLE_NAME>.csv' WITH (FORMAT CSV);对要迁移的每个表和超表重复此操作。
迁移表和超表数据后,迁移 PostgreSQL 后数据模式。这包括有关约束的信息。
在命令提示符下,使用源数据库连接详细信息,将源数据库的后数据模式转储到 `dump_post_data.dump` 文件中。排除 Timescale 特定的模式。如果提示输入密码,请使用源数据库凭据
pg_dump -U <SOURCE_DB_USERNAME> -W \-h <SOURCE_DB_HOST> -p <SOURCE_DB_PORT> -Fc -v \--section=post-data --exclude-schema="_timescaledb*" \-f dump_post_data.dump <DATABASE_NAME>使用您的连接详细信息,将 `dump_post_data.dump` 文件中转储的后数据模式恢复到 Timescale 数据库。为避免权限错误,请包含 `--no-owner` 标志
pg_restore -U tsdbadmin -W \-h <HOST> -p <PORT> --no-owner -Fc \-v -d tsdb dump_post_data.dump
如果在迁移过程中看到这些错误,可以安全地忽略它们。迁移仍会成功进行。
pg_restore: error: could not execute query: ERROR: relation "<relation_name>" already exists
pg_restore: error: could not execute query: ERROR: trigger "ts_insert_blocker" for relation "<relation_name>" already exists
当您独立传输模式和数据时,连续聚合默认不会被迁移。您可以通过重新创建连续聚合定义并在 Timescale 数据库上重新计算结果来恢复它们。重新计算的连续聚合只会聚合 Timescale 数据库中已存在的数据。它们不包括已删除的原始数据。
连接到您的源数据库
psql "postgres://<SOURCE_DB_USERNAME>:<SOURCE_DB_PASSWORD>@<SOURCE_DB_HOST>:<SOURCE_DB_PORT>/<SOURCE_DB_NAME>?sslmode=require"获取现有连续聚合定义的列表
SELECT view_name, view_definition FROM timescaledb_information.continuous_aggregates;此查询返回所有连续聚合的名称和定义。例如
view_name | view_definition----------------+--------------------------------------------------------------------------------------------------------avg_fill_levels | SELECT round(avg(fill_measurements.fill_level), 2) AS avg_fill_level, +| time_bucket('01:00:00'::interval, fill_measurements."time") AS bucket, +| fill_measurements.sensor_id +| FROM fill_measurements +| GROUP BY (time_bucket('01:00:00'::interval, fill_measurements."time")), fill_measurements.sensor_id;(1 row)连接到您的 Timescale 数据库
psql "postgres://tsdbadmin:<PASSWORD>@<HOST>:<PORT>/tsdb?sslmode=require"重新创建每个连续聚合定义
CREATE MATERIALIZED VIEW <VIEW_NAME>WITH (timescaledb.continuous) AS<VIEW_DEFINITION>
默认情况下,当您独立传输模式和数据时,策略不会被迁移。请在 Timescale 数据库上重新创建它们。
连接到您的源数据库
psql "postgres://<SOURCE_DB_USERNAME>:<SOURCE_DB_PASSWORD>@<SOURCE_DB_HOST>:<SOURCE_DB_PORT>/<SOURCE_DB_NAME>?sslmode=require"获取现有策略的列表。此查询返回所有策略的列表,包括连续聚合刷新策略、保留策略、压缩策略和重新排序策略
SELECT application_name, schedule_interval, retry_period,config, hypertable_nameFROM timescaledb_information.jobs WHERE owner = '<SOURCE_DB_USERNAME>';连接到您的 Timescale 数据库
psql "postgres://tsdbadmin:<PASSWORD>@<HOST>:<PORT>/tsdb?sslmode=require"重新创建每个策略。有关重新创建策略的更多信息,请参阅连续聚合刷新策略、保留策略、Hypercore 策略和重新排序策略。
通过对整个数据集运行 ANALYZE
来更新表统计信息。请注意,这可能需要一些时间,具体取决于数据库的大小
ANALYZE;
如果在运行 ANALYZE
时看到以下形式的错误,可以安全地忽略它们
WARNING: skipping "<TABLE OR INDEX>" --- only superuser can analyze it
跳过的表和索引对应于无法访问的系统目录。跳过它们不会影响数据的统计信息。
关键词
此页面有问题?报告问题 或 在 GitHub 上编辑此页面
。