Timescale Cloud:性能、规模、企业级

自托管产品

MST

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

注意

使用表空间是 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 上编辑此页面