F.56. ptrack
PTRACK â ÑÑо Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼, пÑедназнаÑеннÑй Ð´Ð»Ñ ÑезеÑвного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ Postgres Pro на ÑÑовне блоков. Ðогда PTRACK вклÑÑÑн, пÑогÑÐ°Ð¼Ð¼Ñ ÑезеÑвного копиÑованиÑ, в ÑаÑÑноÑÑи pg_probackup, могÑÑ Ð¸ÑполÑзоваÑÑ ÐµÐ³Ð¾ API Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии об изменÑннÑÑ Ð±Ð»Ð¾ÐºÐ°Ñ , ÑÐ¾Ð·Ð´Ð°Ð²Ð°Ñ Ð¸Ð½ÐºÑеменÑалÑнÑе копии. ÐопиÑÑÑ ÑолÑко блоки, изменÑннÑе Ñо вÑемени ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑедÑдÑÑей копии, можно знаÑиÑелÑно ÑÑкоÑиÑÑ Ð¿ÑоÑеÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ минимизиÑоваÑÑ Ð¾Ð±ÑÑм ÑезеÑвнÑÑ ÐºÐ¾Ð¿Ð¸Ð¹.
PTRACK ÑпÑоекÑиÑован Ñак, ÑÑо он Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð¿ÑÑкаÑÑ Ð½ÐµÑоÑноÑÑи в положиÑелÑнÑÑ ÑÑоÑонÑ, но оÑибки в оÑÑиÑаÑелÑнÑÑ ÑÑоÑÐ¾Ð½Ñ Ð¸ÑклÑÑенÑ: ÑÑо ознаÑаеÑ, ÑÑо вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² каÑалоге даннÑÑ , не ÑÑиÑÐ°Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ вÑпомогаÑелÑнÑÑ Ð±Ð¸Ñов, гаÑанÑиÑованно оÑмеÑаÑÑÑÑ Ð² каÑÑе PTRACK, Ñ Ð¾ÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑннÑми могÑÑ Ñакже ÑÑиÑаÑÑÑÑ Ð¸ некоÑоÑÑе на Ñамом деле не модиÑиÑиÑованнÑе блоки.
F.56.1. ÐаÑÑÑойка PTRACK
УÑÑановив Postgres Pro Standard, вÑполниÑе ÑледÑÑÑие дейÑÑвиÑ:
ÐобавÑÑе
ptrackв паÑамеÑÑ shared_preload_libraries в Ñайлеpostgresql.conf:shared_preload_libraries = 'ptrack'
ÐадайÑе Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа ptrack.map_size положиÑелÑное Ñелое знаÑение.
ÐÐ»Ñ Ð¾Ð¿ÑималÑной пÑоизводиÑелÑноÑÑи ÑекомендÑеÑÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ
ptrack.map_sizeÑавнÑм, гдеN/ 1024Nâ обÑÑм клаÑÑеÑа Postgres Pro в мегабайÑÐ°Ñ . ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð±ÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¼ÐµÐ½ÑÑее знаÑение, ÑÑо ÑвелиÑÐ¸Ñ Ð²ÐµÑоÑÑноÑÑÑ Ð½Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии ÑазнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² в каÑÑе PTRACK, ÑÑо повлеÑÑÑ Ð»Ð¾Ð¶Ð½Ñе положиÑелÑнÑе ÑезÑлÑÑаÑÑ Ð¿Ñи опÑеделении изменÑннÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð². ÐÑледÑÑвие ÑÑого в инкÑеменÑалÑнÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾Ð¿Ð°ÑÑÑ Ð¸ неизменÑннÑе блоки, Ð¾Ñ Ñего ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð½ÐµÑколÑко ÑвелиÑиÑÑÑÑ.ÐолÑÑее знаÑение
ptrack.map_sizeне Ð¾ÐºÐ°Ð¶ÐµÑ Ð½ÐµÐ³Ð°Ñивного влиÑÐ½Ð¸Ñ Ð½Ð° ÑабоÑÑ PTRACK, но имейÑе в видÑ, ÑÑо Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð½Ð°Ð´ÑжноÑÑи PTRACK иÑполÑзÑÐµÑ Ð´Ð²Ð° дополниÑелÑнÑÑ Ð²ÑеменнÑÑ Ñайла Ñакого же ÑазмеÑа, поÑÑÐ¾Ð¼Ñ Ð² обÑей ÑложноÑÑи Ð´Ð»Ñ PTRACK поÑÑебÑеÑÑÑÐ¼ÐµÐ³Ð°Ð±Ð°Ð¹Ñ Ð´Ð¸Ñкового пÑоÑÑÑанÑÑва. Ðаже еÑли обÑÑм клаÑÑеÑа Postgres Pro (ptrack.map_size* 3N) пÑевÑÑÐ°ÐµÑ 1TB, знаÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑе 1024 ÑÑÐ¾Ð¸Ñ Ð¸ÑполÑзоваÑÑ, ÑолÑко еÑли ÑÑÑекÑивноÑÑÑ Ð¸, как ÑледÑÑвие, опÑимизаÑÐ¸Ñ ÑазмеÑа ÑезеÑвнÑÑ ÐºÐ¾Ð¿Ð¸Ð¹, пеÑевеÑÐ¸Ð²Ð°ÐµÑ Ð¸Ð·Ð´ÐµÑжки, ÑвÑзаннÑе Ñ ÑвелиÑением каÑÑÑ PTRACK.ÐÑовеÑÑÑе знаÑение паÑамеÑÑа wal_level. ÐÑполÑзÑÑ PTRACK, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÑÑановиÑÑ Ð´Ð»Ñ ÑÑого паÑамеÑÑа знаÑение
replicaили вÑÑе. РпÑоÑивном ÑлÑÑае Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ Ð¿Ð¾ÑеÑÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑлÑÑае аваÑийной оÑÑановки, Ñак как некоÑоÑÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ðµ запиÑÑваÑÑ Ð¸Ð½ÑоÑмаÑиÑ, еÑли ÑÑовенÑwal_levelÑавенminimal, а ÑÐ°Ð¹Ð»Ñ ÐºÐ°ÑÑÑ PTRACK ÑбÑаÑÑваÑÑÑÑ Ð½Ð° диÑк ÑолÑко во вÑÐµÐ¼Ñ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑоÑек.ÐеÑезапÑÑÑиÑе ÑкземплÑÑ Postgres Pro Standard, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑÑÑпили в ÑилÑ, а заÑем ÑоздайÑе ÑаÑÑиÑение PTRACK:
CREATE EXTENSION ptrack;
Ð ÑезÑлÑÑаÑе ÑÑой опеÑаÑии бÑдÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ ÑÑнкÑии PTRACK, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº даннÑм PTRACK.
ÐоÑле запÑÑка ÑеÑвеÑа меÑ
анизм PTRACK наÑÐ¸Ð½Ð°ÐµÑ Ð¾ÑÑлеживаÑÑ Ð²Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð² клаÑÑеÑе Postgres Pro и ÑоздаÑÑ Ñайл ptrack.map, ÑодеÑжаÑий поÑледние знаÑÐµÐ½Ð¸Ñ LSN Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð²ÑиÑ
ÑÑ ÑÑÑаниÑ.
ÐÑимеÑание
ÐаÑамеÑÑ ptrack.map_size можно задаÑÑ ÑолÑко пÑи запÑÑке ÑеÑвеÑа. Ð ÑлÑÑае Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑого паÑамеÑÑа Ñанее ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ°ÑÑа PTRACK оÑиÑаеÑÑÑ, и оÑÑлеживание изменÑннÑÑ
блоков наÑинаеÑÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾. Ðо избежание поÑеÑи изменений ÑекомендÑеÑÑÑ ÑделаÑÑ Ð¿Ð¾Ð»Ð½ÑÑ ÑезеÑвнÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле пÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ ÐµÐ¼Ñ Ð´ÑÑгого знаÑениÑ.
F.56.2. ÐаÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии PTRACK
ptrack.map_size(integer)ÐадаÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ñайла каÑÑÑ PTRACK и обÑÑм вÑделÑемой Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ обÑей памÑÑи в мегабайÑÐ°Ñ . РкаÑÑе PTRACK Ñ ÑанÑÑÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑие знаÑÐµÐ½Ð¸Ñ LSN Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑÑÐ°Ð½Ð¸Ñ ÐºÐ»Ð°ÑÑеÑа Postgres Pro, изменÑннÑÑ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа вклÑÑÐµÐ½Ð¸Ñ PTRACK. ÐÐ»Ñ ÑÑого паÑамеÑÑа не ÑекомендÑеÑÑÑ ÑÑÑанавливаÑÑ Ð·Ð½Ð°Ñение, пÑевÑÑаÑÑее 1 ÐбайÑ. ÐнаÑение 0 оÑклÑÑÐ°ÐµÑ PTRACK и пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ Ð¾ÑиÑÑÐºÑ Ð²ÑÐµÑ ÑлÑжебнÑÑ Ñайлов.
ÐаÑамеÑÑ
ptrack.map_sizeможно задаÑÑ ÑолÑко пÑи запÑÑке ÑеÑвеÑа. Ð ÑлÑÑае Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑого паÑамеÑÑа Ñанее ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ°ÑÑа PTRACK оÑиÑаеÑÑÑ, и оÑÑлеживание изменÑннÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² наÑинаеÑÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾. Ðо избежание поÑеÑи изменений ÑекомендÑеÑÑÑ ÑделаÑÑ Ð¿Ð¾Ð»Ð½ÑÑ ÑезеÑвнÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле пÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ ÐµÐ¼Ñ Ð´ÑÑгого знаÑениÑ.Ðо ÑмолÑаниÑ: 0
F.56.3. ФÑнкÑии PTRACK
ptrack_init_lsn() returnspg_lsnÐозвÑаÑÐ°ÐµÑ LSN, ÑооÑвеÑÑÑвÑÑÑий поÑледней иниÑиализаÑии каÑÑÑ PTRACK.
ptrack_get_pagemapset(наÑалÑнÑй_lsnpg_lsn) returnssetof recordÐозвÑаÑÐ°ÐµÑ ÑпиÑок Ñайлов даннÑÑ , изменÑннÑÑ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа, Ñказанного в паÑамеÑÑе
start_lsn, а Ñакже колиÑеÑÑво и биÑовÑÑ ÐºÐ°ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑннÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñайла.ÐапÑимеÑ:
postgres=# SELECT * FROM ptrack_get_pagemapset('0/185C8C0'); path | pagecount | pagemap ---------------------+-----------+---------------------------------------- base/16384/1255 | 3 | \x001000000005000000000000 base/16384/2674 | 3 | \x0000000900010000000000000000 base/16384/2691 | 1 | \x00004000000000000000000000 base/16384/2608 | 1 | \x000000000000000400000000000000000000 base/16384/2690 | 1 | \x000400000000000000000000ptrack_get_change_stat(наÑалÑнÑй_lsnpg_lsn) returnsrecordÐозвÑаÑÐ°ÐµÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ (колиÑеÑÑво Ñайлов, колиÑеÑÑво изменÑннÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð¸ Ð¸Ñ Ð¾Ð±Ñий ÑÐ°Ð·Ð¼ÐµÑ Ð² мегабайÑÐ°Ñ ) Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа, Ñказанного в паÑамеÑÑе
start_lsn.ÐапÑимеÑ:
postgres=# SELECT * FROM ptrack_get_change_stat('0/285C8C8'); files | pages | size, MB -------+-------+------------------------ 20 | 25 | 0.19531250000000000000ptrack_version() returnstextÐÑдаÑÑ Ð²ÐµÑÑÐ¸Ñ PTRACK.