您可以使用分层存储来节省存储成本。具体来说,您可以将不常用的数据从 Timescale 的标准高性能存储迁移到对象存储。在您启用分层存储后,您可以创建自动分层策略手动分层和取消分层数据

您可以查询对象存储层上的数据,但不能修改它。请确保您没有对需要 активно модифицировать 的数据进行分层。

您可以从控制台中的 Overview 选项卡启用分层存储。

  1. Timescale 控制台中,选择要修改的服务.

    您会看到 Overview 部分。

  2. 向下滚动,然后单击 Enable tiered storage.

    Enable tiered storage

    启用分层存储后,您会看到分层对象存储中的数据量。

    注意

    数据分层仅在 Scale 和 Enterprise 定价计划中可用。

分层策略会自动将仅包含早于 move_after 阈值的数据块移动到对象存储层。这与数据保留策略类似,但数据块是移动而不是删除。

分层策略会调度一个定期运行的作业,以异步方式将符合条件的数据块迁移到对象存储。数据块一旦出现在 timescaledb_osm.tiered_chunks 视图中,就被视为已分层。

您可以将分层策略添加到超表,包括连续聚合。要管理分层策略,请连接到您的服务并在数据模式、SQL 编辑器或使用 psql 中运行以下查询。

要添加分层策略,请调用 add_tiering_policy

SELECT add_tiering_policy(hypertable REGCLASS, move_after INTERVAL, if_not_exists BOOL = false);

例如,要对 example 超表中超过三天的数据块进行分层

SELECT add_tiering_policy('example', INTERVAL '3 days');

默认情况下,分层策略在您的数据库上每小时运行一次。要更改此间隔,请调用 alter_job

要移除现有的分层策略,请调用 remove_tiering_policy

SELECT remove_tiering_policy(hypertable REGCLASS, if_exists BOOL = false);

例如,要从 example 超表中移除分层策略

SELECT remove_tiering_policy('example');

如果您移除分层策略,则剩余的计划数据块不会分层。但是,分层存储中的数据块不会取消分层。您可以手动取消分层数据块到本地存储。

如果分层策略不能满足您当前的需求,您可以手动分层和取消分层数据块。为此,请连接到您的服务并在数据模式、SQL 编辑器或使用 psql 中运行以下查询。

分层数据块是一个异步过程,它会计划要分层的数据块。在以下示例中,您对 example 超表中超过三天的数据块进行分层。然后,您列出分层的数据块。

  1. 选择 example 中所有早于三天的数据块

    SELECT show_chunks('example', older_than => INTERVAL '3 days');

    这将返回数据块列表。记下数据块名称

    |1|_timescaledb_internal_hyper_1_2_chunk|
    |2|_timescaledb_internal_hyper_1_3_chunk|
  2. 调用 tier_chunk 以手动分层每个数据块

    SELECT tier_chunk( '_timescaledb_internal_hyper_1_2_chunk');
  3. 对您要分层的所有数据块重复此操作。

    分层数据块会将其计划迁移到对象存储层,但迁移不会立即发生。数据块一次分层一个,以最大限度地减少数据库资源消耗。只有在数据块持久存储在对象存储层中后,才会被标记为已迁移并从标准存储中删除。您可以在迁移期间继续查询数据块。

  4. 要查看哪些数据块已分层到对象存储层,请使用 tiered_chunks 信息视图

    SELECT * FROM timescaledb_osm.tiered_chunks;

要查看哪些数据块已通过策略或手动调用计划分层,但尚未分层,请使用此视图

SELECT * FROM timescaledb_osm.chunks_queued_for_tiering ;

要更新分层数据块中的数据,请将其移回 Timescale Cloud 中的标准高性能存储层。取消分层数据块是一个同步过程。当数据取消分层时,数据块将被重命名。

要取消分层数据块,请调用 untier_chunk 存储过程。

  1. 检查当前哪些数据块已分层

    SELECT * FROM timescaledb_osm.tiered_chunks ;

    示例输出

    hypertable_schema | hypertable_name | chunk_name | range_start | range_end
    -------------------+-----------------+------------------+------------------------+------------------------
    public | sample | _hyper_1_1_chunk | 2023-02-16 00:00:00+00 | 2023-02-23 00:00:00+00
    (1 row)
  2. 调用 untier_chunk:

    CALL untier_chunk('_hyper_1_1_chunk');
  3. 使用 timescaledb_information.chunks 查看数据块的详细信息:

    SELECT * FROM timescaledb_information.chunks;

    示例输出

    -[ RECORD 1 ]----------+-------------------------
    hypertable_schema | public
    hypertable_name | sample
    chunk_schema | _timescaledb_internal
    chunk_name | _hyper_1_4_chunk
    primary_dimension | ts
    primary_dimension_type | timestamp with time zone
    range_start | 2023-02-16 00:00:00+00
    range_end | 2020-03-23 00:00:00+00
    range_start_integer |
    range_end_integer |
    is_compressed | f
    chunk_tablespace |
    data_nodes |

如果您不再想对特定的超表使用分层存储,请通过调用 disable_tiering 删除关联的元数据。

  1. 要删除与表关联的所有分层策略,请调用 remove_tiering_policy.

  2. 确保没有与此超表关联的分层数据:

    1. 列出与此超表关联的分层数据块

      select * from timescaledb_osm.tiered_chunks
    2. 如果您有任何分层数据块,请取消分层此数据,或从分层存储中删除这些数据块。

  3. 使用 disable_tiering 删除超表的所有与分层相关的元数据:

    select disable_tiering('my_hypertable_name');
  4. 通过列出已启用分层的超表来验证分层是否已禁用:

    select * from timescaledb_osm.tiered_hypertables;

关键词

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