PostgresqlデータベースTimescaleDB通常の圧縮スーパーテーブル削除スーパーテーブル(ブロック)

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 (整数)ジョブが失敗した場合、ジョブが再試行される回数
再試行期間 (間隔)スケジューラーが失敗した再試行の間に待機する時間

参考資料
https://blog.csdn.net/woai243779594/article/details/107544310?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog- BlogCommendFromBaidu-1.control

基本的にはここにあります。ご
不明な点がございましたら、メッセージを残すか、個人的にチャットしてください。ちなみに、TimescaleDBの情報が少なすぎるため、完了できません。ありがとうございます。

おすすめ

転載: blog.csdn.net/yang_z_1/article/details/111560747