PostgresqlデータベースTimescaleDB通常の圧縮スーパーテーブル削除スーパーテーブル(ブロック)
記事のディレクトリ
postgresqlデータベースのTimescaleDBタイミングライブラリを使用して、リアルタイムデータを作業に保存しています。収集されるデータの量が多すぎて、提供されるメモリが不足しているため、データの保存方法を検討してください。
TimescaleDBデータベースのスーパーテーブルTimescaleDBデータベース自体は関数で実現できます
TimescaleDBデータベースによって運ばれる関数
1.圧縮SELECTcompress_chunk()
データをできるだけ失わないために、データの削除を避けるために、最初に独自の関数SELECT compress_chunk()を使用してデータを圧縮することを検討します。
1クエリ時間show_chunks()
CREATE OR REPLACE FUNCTION "hrmw"."show_chunks"("hypertable" regclass=NULL::regclass, "older_than" any=NULL::unknown, "newer_than" any=NULL::unknown)
RETURNS SETOF "pg_catalog"."regclass" AS '$libdir/timescaledb-1.7.1', 'ts_chunk_show_chunks'
LANGUAGE c STABLE
COST 1
ROWS 1000
show_shunks()の使用法
select show_shunks(); --查看所有块
select show_shunks(超表名); --查看某个超表底下的所有块
SELECT show_chunks(older_than => INTERVAL '10 days', newer_than => INTERVAL '20 days');
-- 查询10天到20天的的块
180日間のデータをクエリするには
SELECT show_chunks('超表名',older_than => INTERVAL '180 days', newer_than => INTERVAL '182 days');
2.compress_chunk()圧縮関数
CREATE OR REPLACE FUNCTION "hrmw"."compress_chunk"("uncompressed_chunk" regclass, "if_not_compressed" bool=false)
RETURNS "pg_catalog"."regclass" AS '$libdir/timescaledb-1.7.1', 'ts_compress_chunk'
LANGUAGE c VOLATILE STRICT
COST 1
2.1最初にスーパーテーブルを圧縮可能にする
ALTER TABLE '超表名' SET (
timescaledb.compress,
timescaledb.compress_segmentby = '主键(字段名)',
timescaledb.compress_orderby = '时间字段 DESC');
2.2圧縮パーティション
-SELECT compress_chunk();を
圧縮します180日間のデータを圧縮します
SELECT compress_chunk( '_timescaledb_internal._hyper_4_238_chunk');
-- SELECT compress_chunk( '_timescaledb_internal.分区名(块)');
-圧縮後のスペースステータスのクエリ
SELECT * FROM timescaledb_information.compressed_chunk_stats;
-解凍
SELECT decompress_chunk('_timescaledb_internal._hyper_4_26_chunk');
-- SELECT decompress_chunk('_timescaledb_internal.分区名(块)');
3.機能を使用して180日を自動的に圧縮します
CREATE
OR REPLACE FUNCTION "hrmw"."target_compress_chunk" ( ) RETURNS "pg_catalog"."void" AS $BODY$ DECLARE--定义变量
t_accid VARCHAR;--变量
strSQL VARCHAR ( 1000 );
BEGIN--函数开始
t_accid := ( SELECT show_chunks ( '超表名', older_than => INTERVAL '180 days', newer_than => INTERVAL '182 days' ) );
strSQL := 'select compress_chunk(''' || t_accid || ''' ,true);';
EXECUTE strSQL;
END;--结束
$BODY$ LANGUAGE plpgsql VOLATILE COST 100
4.時間指定タスクを追加します
(毎日2:30に180日間のパーティション(ブロック)を自動的に圧縮します)
postgresqlデータベースに付属のpgadminツールを使用して、時限タスクを作成します
。追加するコード:
SET search_path TO hrmw;
select hrmw.target_compress_chunk();--执行函数target_compress_chunk()
ステップ1ステップ
2
ステップ3
2つの削除パーティション
圧縮後もまだデータが多いため、データを
削除できるのは半年前のみです。バッチ削除では、drop_chunks()関数を使用できます。怠惰です。自動化戦略add_drop_chunks_policy()を使用しました。
#创建策略 只保留保留最近半年的数据(直接删除块)
SELECT add_drop_chunks_policy('conditions', INTERVAL '6 months');
クエリ戦略
select * from timescaledb_information.drop_chunks_policies;
スーパーテーブルごとに1つの戦略しか存在できません
フィールド名 | 説明 |
---|---|
ハイパーテーブル | (REGCLASS)戦略が適用されるスーパーテーブルの名前 |
より古い | (間隔)この戦略を実行すると、この時間よりはるかに長いブロックが破棄されます |
カスケード | (ブール値)カスケードオプションをオンにしてストラテジーを実行するかどうか。これにより、依存オブジェクトとブロックが破棄されます。 |
job_id | (INTEGER)drop_chunks戦略を実装するために設定されたバックグラウンドジョブのI |
schedule_interval | (間隔)ジョブが実行される間隔 |
max_runtime | (間隔)バックグラウンドジョブスケジューラがジョブを停止する前に実行できる最大時間 |
max_retries | (整数)ジョブが失敗した場合、ジョブが再試行される回数 |
再試行期間 | (間隔)スケジューラーが失敗した再試行の間に待機する時間 |
基本的にはここにあります。ご
不明な点がございましたら、メッセージを残すか、個人的にチャットしてください。ちなみに、TimescaleDBの情報が少なすぎるため、完了できません。ありがとうございます。