Ðлава 49. ÐÑÑлеживание пÑогÑеÑÑа ÑепликаÑии
ÐнÑÑаÑÑÑÑкÑÑÑа иÑÑоÑников ÑепликаÑии введена Ð´Ð»Ñ ÑпÑоÑÐµÐ½Ð¸Ñ ÑеализаÑии ÑеÑений логиÑеÑкой ÑепликаÑии на оÑнове логиÑеÑкого декодиÑованиÑ. Ðна Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ ÑеÑиÑÑ Ð´Ð²Ðµ ÑаÑпÑоÑÑÑанÑннÑÑ Ð¿ÑоблемÑ:
Ðак надÑжно оÑÑлеживаÑÑ Ð¿ÑогÑеÑÑ ÑепликаÑии
Ðак менÑÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ÑепликаÑии в завиÑимоÑÑи Ð¾Ñ Ð¸ÑÑоÑника ÑÑÑоки; напÑимеÑ, Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ñиклов пÑи двÑнапÑавленной ÑепликаÑии
ÐÑÑоÑники ÑепликаÑии имеÑÑ ÑолÑко два ÑвойÑÑва: Ð¸Ð¼Ñ Ð¸ ID. ÐмÑ, по коÑоÑÐ¾Ð¼Ñ Ðº иÑÑоÑÐ½Ð¸ÐºÑ ÑледÑÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ð¸Ð· ÑазнÑÑ
ÑиÑÑем, задаÑÑÑÑ Ð·Ð½Ð°Ñением Ñипа text в пÑоизволÑной ÑоÑме. Ðго ÑледÑÐµÑ Ð²ÑбиÑаÑÑ Ñак, ÑÑÐ¾Ð±Ñ ÐºÐ¾Ð½ÑликÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð¸ÑÑоÑниками ÑепликаÑии, ÑозданнÑми ÑазлиÑнÑми ÑÑедÑÑвами ÑепликаÑии бÑли маловеÑоÑÑнÑ; напÑимеÑ, добавлÑÑÑ Ð² наÑало обознаÑение ÑÑедÑÑва ÑепликаÑии. ID иÑполÑзÑеÑÑÑ ÑолÑко Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð½Ðµ пÑиÑ
одилоÑÑ Ñ
ÑаниÑÑ Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð¸Ð¼Ñ Ñам, где ÑÑебÑеÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð¸Ð·Ð¸ÑоваÑÑ Ð¾Ð±ÑÑм. Ðн не Ð¼Ð¾Ð¶ÐµÑ ÑазделÑÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑазнÑми ÑиÑÑемами.
ÐÑÑоÑник ÑепликаÑии можно ÑоздаÑÑ ÑÑнкÑией pg_replication_origin_create(); ÑдалиÑÑ ÑÑнкÑией pg_replication_origin_drop(); и ÑвидеÑÑ Ð² ÑиÑÑемном каÑалоге pg_replication_origin.
Ðдной из неÑÑивиалÑнÑÑ Ð·Ð°Ð´Ð°Ñ Ð¿Ñи оÑганизаÑии ÑепликаÑии ÑвлÑеÑÑÑ Ð½Ð°Ð´Ñжное оÑÑлеживание пÑогÑеÑÑа воÑпÑоизведениÑ. ÐапÑимеÑ, когда пÑименÑÑÑий Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÑоÑеÑÑ (или веÑÑ ÐºÐ»Ð°ÑÑеÑ) ÑмиÑаеÑ, нÑжно имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿Ð¾Ð½ÑÑÑ, какие даннÑе бÑли пеÑÐµÐ´Ð°Ð½Ñ ÑÑпеÑно. ÐаивнÑе ÑеÑÐµÐ½Ð¸Ñ ÑÑой пÑоблемÑ, Ñакие как изменение ÑÑÑоки в некоÑоÑой ÑаблиÑе Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ воÑпÑоизведÑнной ÑÑанзакÑии, ÑÑеваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной нагÑÑзкой во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸ ÑаздÑванием Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
С иÑполÑзованием инÑÑаÑÑÑÑкÑÑÑÑ Ð¸ÑÑоÑников ÑепликаÑии ÑÐµÐ°Ð½Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð¼ÐµÑен как воÑпÑоизводÑÑий Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ ÑдалÑнного Ñзла (Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии pg_replication_origin_session_setup()). Рдополнение к ÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑанзакÑии из иÑÑоÑника можно задаÑÑ LSN и вÑÐµÐ¼Ñ ÑикÑаÑии, вÑзвав pg_replication_origin_xact_setup(). ÐÑли ÑделаÑÑ Ð²ÑÑ ÑÑо, пÑогÑеÑÑ ÑепликаÑии можно бÑÐ´ÐµÑ Ð¾ÑÑлеживаÑÑ Ð½Ð°Ð´ÑжнÑм обÑазом. ÐÑогÑеÑÑ Ð²Ð¾ÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²ÑеÑ
иÑÑоÑников ÑепликаÑии можно ÑвидеÑÑ Ð² пÑедÑÑавлении pg_replication_origin_status. ÐÑогÑеÑÑ Ð¾ÑделÑного иÑÑоÑника, напÑимеÑ, пÑи возобновлении ÑепликаÑии, можно полÑÑиÑÑ Ð´Ð»Ñ Ð»Ñбого иÑÑоÑника, воÑполÑзовавÑиÑÑ ÑÑнкÑией pg_replication_origin_progress(), или Ð´Ð»Ñ Ð¸ÑÑоÑника, наÑÑÑоенного в ÑекÑÑем ÑеанÑе, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ pg_replication_origin_session_progress().
Ð ÑопологиÑÑ
ÑепликаÑии более ÑложнÑÑ
, Ñем пÑоÑÑÐ°Ñ ÑепликаÑÐ¸Ñ Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑиÑÑÐµÐ¼Ñ Ð² дÑÑгÑÑ, возможна еÑÑ Ð¾Ð´Ð½Ð° пÑоблема â повÑоÑÐ½Ð°Ñ ÑепликаÑÐ¸Ñ Ñже воÑпÑоизведÑннÑÑ
ÑÑÑок, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº заÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑекÑивноÑÑи. РкаÑеÑÑве меÑ
анизма вÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸ пÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²ÑоÑной ÑепликаÑии Ñак же могÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð¸ÑÑоÑники ÑепликаÑии. ÐÑли воÑполÑзоваÑÑÑÑ ÑÑнкÑиÑми, ÑпомÑнÑÑÑми в пÑедÑдÑÑем абзаÑе, во вÑе поÑÑÑпаÑÑие в ÑеанÑе ÑÑанзакÑии и изменениÑ, пеÑедаваемÑе обÑабоÑÑикам модÑлей вÑвода (Ñм. Раздел 48.6), добавлÑеÑÑÑ Ð¿Ð¾Ð¼ÐµÑка иÑÑоÑника ÑепликаÑии Ð´Ð»Ñ ÑекÑÑего ÑеанÑа. ÐÑо позволÑÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð¸Ñ
в модÑле вÑвода по-ÑазномÑ, напÑимеÑ, игноÑиÑоваÑÑ Ð²Ñе ÑÑÑоки, кÑоме имеÑÑиÑ
локалÑное пÑоиÑÑ
ождение. ÐÑоме Ñого, обÑабоÑÑик вÑзова filter_by_origin_cb позволÑÐµÑ Ð¾ÑÑилÑÑÑоваÑÑ Ð¿Ð¾Ñок изменений логиÑеÑкого декодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² завиÑимоÑÑи Ð¾Ñ Ð¸ÑÑоÑника. ФилÑÑÑаÑÐ¸Ñ ÑеÑез ÑÑÐ¾Ñ Ð¾Ð±ÑабоÑÑик не Ñак гибка, как пÑовеÑка запиÑей внÑÑÑи модÑÐ»Ñ Ð²Ñвода, но заÑо гоÑаздо ÑÑÑекÑивнее.