استفاده از شکاف تکرار منطقی wal2json در GBase 8c

1. تنظیمات پارامتر
برای استفاده از تکرار منطقی wal2json، پارامترهای زیر باید تنظیم شوند:
wal_level = logical
enable_slot_log = on
تنظیمات wal_level
به logical
به این معنی که لاگ WAL از تکرار منطقی پشتیبانی می کند. در صورت نیاز به رمزگشایی آماده به کار، تنظیم کنید enable_slot_log
به on
روی سرور اصلی مربوطه
2. استفاده از Logical Replication Slot
2.1 ایجاد یک شکاف تکرار منطقی
در اینجا نمونه ای از ایجاد یک شکاف تکرار منطقی به نام آورده شده است test_slot
، با استفاده از افزونه شکاف تکرار wal2json:
SELECT pg_create_logical_replication_slot('test_slot', 'wal2json');
2.2 جستجوی شکاف تکرار منطقی
SELECT * FROM pg_replication_slots;
SELECT pg_get_replication_slots();
این PG_REPLICATION_SLOTS
view اطلاعاتی در مورد شکاف تکرار ارائه می دهد.
نام | تایپ کنید | شرح |
---|---|---|
slot_name |
text |
نام شکاف تکرار. |
plugin |
text |
نام افزونه خروجی مربوط به شکاف تکرار منطقی است. |
slot_type |
text |
نوع شکاف تکرار. physical : اسلات تکثیر فیزیکی. logical : شکاف تکرار منطقی. |
datoid |
oid |
OID پایگاه داده که در آن شکاف تکرار قرار دارد. |
database |
name |
نام پایگاه داده ای که شکاف تکرار در آن قرار دارد. |
active |
boolean |
اینکه آیا شکاف تکرار فعال است یا خیر. t (درست): بله. f (نادرست): خیر. |
xmin |
xid |
اولین شناسه تراکنش که باید توسط شکاف تکرار حفظ شود. |
catalog_xmin |
xid |
اولین شناسه تراکنش شامل جداول سیستم که باید حفظ شوند. |
restart_lsn |
text |
اولین مکان فیزیکی xlog مورد نیاز شکاف تکرار. |
dummy_standby |
boolean |
اینکه انتهای راه دور شکاف تکرار در حالت آماده به کار باشد. t (درست): بله. f (نادرست): خیر. |
confirmed_flush |
text |
برای اسلات های تکرار منطقی، موقعیت ثبت توسط مشتری تایید می شود. |
2.3 حذف یک شکاف تکرار منطقی
SELECT pg_drop_replication_slot('test_slot');
2.4 رمزگشایی شکاف تکرار
دو راه برای رمزگشایی شکاف تکرار وجود دارد: بدون پیشبرد شکاف (بنابراین دفعه بعد میتوانید همان دادهها را دوباره بازیابی کنید) و با پیشبرد شکاف.
- رمزگشایی بدون پیشبرد شکاف:
SELECT pg_logical_slot_peek_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value');
- رمزگشایی و پیشبرد اسلات:
SELECT pg_logical_slot_get_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value');
مثال:
یک جدول بسازید و داده ها را وارد کنید:
postgres=# create table t1(id int, c1 int);
CREATE TABLE
postgres=# insert into t1 values (1,1);
INSERT 0 1
postgres=# insert into t1 values (2,2);
رمزگشایی و پیشبرد شکاف منطقی:
SELECT pg_logical_slot_get_changes('test_slot', NULL, NULL);
رمزگشایی بدون پیشبرد شکاف منطقی:
اگر هیچ رکوردی وجود نداشته باشد، طبیعی است زیرا شکاف قبلاً پیشرفته شده است. تغییرات جدید داده در نتایج ظاهر می شود.
3. نظارت بر شکاف های تکرار منطقی
SELECT
slot_name,
database AS datname,
plugin,
slot_type,
datoid,
database,
active,
xmin,
catalog_xmin,
restart_lsn,
pg_size_pretty(pg_xlog_location_diff(
CASE
WHEN pg_is_in_recovery() THEN pg_last_xlog_receive_location()
ELSE pg_current_xlog_location()
END,
restart_lsn
)) AS delay_lsn_bytes,
dummy_standby,
confirmed_flush
FROM pg_replication_slots;
عدم پیشبرد شکاف تکرار مانع از پاکسازی خودکار گزارشهای WAL توسط GBase میشود. تجمع لاگ ها فضای دیسک محلی را اشغال می کند. پرس و جوی SQL بالا کمک می کند تا با بررسی تعداد بایت ها بین LSN مورد نیاز شکاف منطقی فعلی و آخرین LSN تعیین شود که آیا باید شکاف تکرار را پیش برد.