您可以使用分层存储来节省存储成本。具体来说,您可以将不常用的数据从 Timescale 的标准高性能存储迁移到对象存储。在您启用分层存储后,您可以创建自动分层策略或手动分层和取消分层数据。
您可以查询对象存储层上的数据,但不能修改它。请确保您没有对需要 активно модифицировать 的数据进行分层。
您可以从控制台中的 Overview
选项卡启用分层存储。
在Timescale 控制台中,选择要修改的服务.
您会看到
Overview
部分。向下滚动,然后单击
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
超表中超过三天的数据块进行分层。然后,您列出分层的数据块。
选择
example
中所有早于三天的数据块SELECT show_chunks('example', older_than => INTERVAL '3 days');这将返回数据块列表。记下数据块名称
|1|_timescaledb_internal_hyper_1_2_chunk||2|_timescaledb_internal_hyper_1_3_chunk|调用
tier_chunk
以手动分层每个数据块SELECT tier_chunk( '_timescaledb_internal_hyper_1_2_chunk');对您要分层的所有数据块重复此操作。
分层数据块会将其计划迁移到对象存储层,但迁移不会立即发生。数据块一次分层一个,以最大限度地减少数据库资源消耗。只有在数据块持久存储在对象存储层中后,才会被标记为已迁移并从标准存储中删除。您可以在迁移期间继续查询数据块。
要查看哪些数据块已分层到对象存储层,请使用
tiered_chunks
信息视图SELECT * FROM timescaledb_osm.tiered_chunks;
要查看哪些数据块已通过策略或手动调用计划分层,但尚未分层,请使用此视图
SELECT * FROM timescaledb_osm.chunks_queued_for_tiering ;
要更新分层数据块中的数据,请将其移回 Timescale Cloud 中的标准高性能存储层。取消分层数据块是一个同步过程。当数据取消分层时,数据块将被重命名。
要取消分层数据块,请调用 untier_chunk
存储过程。
检查当前哪些数据块已分层
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)调用
untier_chunk
:CALL untier_chunk('_hyper_1_1_chunk');使用
timescaledb_information.chunks
查看数据块的详细信息:SELECT * FROM timescaledb_information.chunks;示例输出
-[ RECORD 1 ]----------+-------------------------hypertable_schema | publichypertable_name | samplechunk_schema | _timescaledb_internalchunk_name | _hyper_1_4_chunkprimary_dimension | tsprimary_dimension_type | timestamp with time zonerange_start | 2023-02-16 00:00:00+00range_end | 2020-03-23 00:00:00+00range_start_integer |range_end_integer |is_compressed | fchunk_tablespace |data_nodes |
如果您不再想对特定的超表使用分层存储,请通过调用 disable_tiering
删除关联的元数据。
要删除与表关联的所有分层策略,请调用
remove_tiering_policy
.确保没有与此超表关联的分层数据:
列出与此超表关联的分层数据块
select * from timescaledb_osm.tiered_chunks如果您有任何分层数据块,请取消分层此数据,或从分层存储中删除这些数据块。
使用
disable_tiering
删除超表的所有与分层相关的元数据:select disable_tiering('my_hypertable_name');通过列出已启用分层的超表来验证分层是否已禁用:
select * from timescaledb_osm.tiered_hypertables;
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。