如果您在自己的硬件上运行 Timescale,则可以通过在表空间之间移动数据块来节省存储空间。通过将旧的数据块移动到更便宜、更慢的存储,您可以节省存储成本,同时仍然对频繁访问的数据使用更快、更昂贵的存储。移动不常访问的数据块还可以提高性能,因为它将历史数据与较新数据的持续读写工作负载隔离开来。

注意

使用表空间是管理 Timescale 数据存储成本的一种方法。您还可以使用 压缩数据保留 来减少您的存储需求。

在 Timescale 上免费试用

Timescale 是一项完全托管的服务,具有自动备份和恢复、通过复制实现高可用性、无缝扩展和调整大小以及更多功能。您可以免费试用 Timescale 三十天。

免费试用

要将数据块移动到新的表空间,您首先需要创建新的表空间并设置存储挂载点。然后,您可以使用 move_chunk API 调用将单个数据块从默认表空间移动到新的表空间。move_chunk 命令还允许您将属于这些数据块的索引移动到适当的表空间。

此外,move_chunk 允许您在迁移期间重新排序数据块。这可以用于加快您的查询速度,并且其工作方式类似于 reorder_chunk 命令

注意

您必须以超级用户身份登录,例如 postgres 用户,才能使用 move_chunk() API 调用。

  1. 创建一个新的表空间。在本示例中,表空间名为 history,它由 postgres 超级用户拥有,挂载点为 /mnt/history

    CREATE TABLESPACE history
    OWNER postgres
    LOCATION '/mnt/history';
  2. 列出您要移动的数据块。在本示例中,数据块包含超过两天的数据

    SELECT show_chunks('conditions', older_than => INTERVAL '2 days');
  3. 将数据块及其索引移动到新的表空间。您也可以在此步骤中重新排序数据。在本示例中,名为 _timescaledb_internal._hyper_1_4_chunk 的数据块被移动到 history 表空间,并基于其时间索引重新排序

    SELECT move_chunk(
    chunk => '_timescaledb_internal._hyper_1_4_chunk',
    destination_tablespace => 'history',
    index_destination_tablespace => 'history',
    reorder_index => '_timescaledb_internal._hyper_1_4_chunk_netdata_time_idx',
    verbose => TRUE
    );
  4. 您可以通过查询 pg_tables 列出表空间上的所有数据块来验证该数据块现在是否位于正确的表空间中

    SELECT tablename from pg_tables
    WHERE tablespace = 'history' and tablename like '_hyper_%_%_chunk';

    您还可以验证索引是否在正确的位置

    SELECT indexname FROM pg_indexes WHERE tablespace = 'history';

要一次移动多个数据块,请使用 FROM show_chunks(...) 选择您要移动的数据块。例如,要移动名为 example 的超级表中包含 1 到 3 周数据的块

SELECT move_chunk(
chunk => i,
destination_tablespace => '<TABLESPACE>')
FROM show_chunks('example', now() - INTERVAL '1 week', now() - INTERVAL '3 weeks') i;

将数据块移动到较慢的表空间后,您可以将其移回默认的、更快的表空间

SELECT move_chunk(
chunk => '_timescaledb_internal._hyper_1_4_chunk',
destination_tablespace => 'pg_default',
index_destination_tablespace => 'pg_default',
reorder_index => '_timescaledb_internal._hyper_1_4_chunk_netdata_time_idx'
);

您可以将数据块移动到较慢的表空间,但将数据块的索引保留在默认的、更快的表空间上

SELECT move_chunk(
chunk => '_timescaledb_internal._hyper_1_4_chunk',
destination_tablespace => 'history',
index_destination_tablespace => 'pg_default',
reorder_index => '_timescaledb_internal._hyper_1_4_chunk_netdata_time_idx'
);

您还可以将数据保留在 pg_default 中,但将索引移动到 history。或者,您可以设置第三个名为 history_indexes 的表空间,并将数据移动到 history,将索引移动到 history_indexes

在 Timescale 2.0 及更高版本中,您可以将 move_chunk 与作业调度框架一起使用。有关更多信息,请参阅 用户定义操作部分

关键词

在此页面上发现问题?报告问题 或在 GitHub 中编辑此页面