F.57. pg_walinspect
ÐодÑÐ»Ñ pg_walinspect пÑедоÑÑавлÑÐµÑ SQL-ÑÑнкÑии Ð´Ð»Ñ Ð¿ÑоÑмоÑÑа жÑÑнала пÑедзапиÑи на низком ÑÑовне. Ðн ÑабоÑÐ°ÐµÑ Ñ Ð·Ð°Ð¿ÑÑеннÑм клаÑÑеÑом баз даннÑÑ
PostgreSQL и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ Ð´Ð»Ñ Ñелей оÑладки, анализа, оÑÑÑÑноÑÑи или обÑÑениÑ. ÐодÑÐ»Ñ Ð¿Ð¾Ñ
ож на pg_waldump, но ÑабоÑÐ°ÐµÑ ÑеÑез SQL, а не как оÑделÑÐ½Ð°Ñ ÑÑилиÑа.
ÐÑе ÑÑнкÑии ÑÑого модÑÐ»Ñ Ð²ÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· WAL, оÑноÑÑÑÑÑÑÑ Ðº ÑекÑÑей линии вÑемени ÑеÑвеÑа.
ÐÑе ÑÑнкÑии ÑÑого модÑÐ»Ñ Ð¿ÑÑаÑÑÑÑ Ð½Ð°Ð¹Ñи пеÑвÑÑ ÐºÐ¾ÑÑекÑнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ WAL, наÑÐ¸Ð½Ð°Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾_lsn или наÑалÑного_lsn, и возвÑаÑаÑÑ Ð¾ÑибкÑ, еÑли ÑÐ°ÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð½Ðµ найдÑÑÑÑ. Также в WAL должна бÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ ÐºÐ¾Ð½ÐµÑномÑ_lsn, и она должна бÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð¹.
ÐÑимеÑание
ÐекоÑоÑÑе ÑÑнкÑии, напÑÐ¸Ð¼ÐµÑ pg_logical_emit_message, возвÑаÑаÑÑ LSN поÑле ÑолÑко ÑÑо вÑÑавленной запиÑи. Таким обÑазом, еÑли пеÑедаÑÑ ÑÑÐ¾Ñ LSN в каÑеÑÑве заданного_lsn или наÑалÑного_lsn одной из ÑÑиÑ
ÑÑнкÑий, она веÑнÑÑ ÑледÑÑÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзоваÑÑ ÑÑи ÑÑнкÑии ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм и ÑолÑм, вклÑÑÑннÑм в ÑÐ¾Ð»Ñ pg_read_server_files. СÑпеÑполÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°ÑÑ Ð´Ð¾ÑÑÑп дÑÑгим, воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ GRANT.
F.57.1. ФÑнкÑии обÑего назнаÑениÑ
-
pg_get_wal_record_info(in_lsn pg_lsn) returns record ÐолÑÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ запиÑи WAL по Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ LSN. ÐÑли заданнÑй LSN Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð½Ðµ в наÑале запиÑи, вÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑледÑÑÑей доÑÑÑпной коÑÑекÑной запиÑи WAL. ÐÑли Ñакой запиÑи не ÑÑÑеÑÑвÑеÑ, возвÑаÑÐ°ÐµÑ Ð¾ÑибкÑ. Ðиже пÑедÑÑавлен пÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑнкÑии:
postgres=# SELECT * FROM pg_get_wal_record_info('0/1E826E98'); -[ RECORD 1 ]----+---------------------------------------------------- start_lsn | 0/1E826F20 end_lsn | 0/1E826F60 prev_lsn | 0/1E826C80 xid | 0 resource_manager | Heap2 record_type | PRUNE record_length | 58 main_data_length | 8 fpi_length | 0 description | snapshotConflictHorizon 33748 nredirected 0 ndead 2 block_ref | blkref #0: rel 1663/5/60221 fork main blk 2-
pg_get_wal_records_info(start_lsn pg_lsn, end_lsn pg_lsn) returns setof record ÐолÑÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð±Ð¾ вÑÐµÑ ÐºÐ¾ÑÑекÑнÑÑ Ð·Ð°Ð¿Ð¸ÑÑÑ WAL междÑ
наÑалÑнÑм_lsnиконеÑнÑм_lsn. ÐозвÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ запиÑи WAL. ÐÑлинаÑалÑнÑй_lsnиликонеÑнÑй_lsnеÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпнÑ, ÑÑнкÑÐ¸Ñ Ð²ÐµÑнÑÑ Ð¾ÑибкÑ. ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑии:postgres=# SELECT * FROM pg_get_wal_records_info('0/1E913618', '0/1E913740') LIMIT 1; -[ RECORD 1 ]----+-------------------------------------------------------------- start_lsn | 0/1E913618 end_lsn | 0/1E913650 prev_lsn | 0/1E9135A0 xid | 0 resource_manager | Standby record_type | RUNNING_XACTS record_length | 50 main_data_length | 24 fpi_length | 0 description | nextXid 33775 latestCompletedXid 33774 oldestRunningXid 33775 block_ref |-
pg_get_wal_records_info_till_end_of_wal(start_lsn pg_lsn) returns setof record ÐÑа ÑÑнкÑÐ¸Ñ Ð´ÐµÐ¹ÑÑвÑÐµÑ Ñак же, как
pg_get_wal_records_info(), но полÑÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð±Ð¾ вÑÐµÑ ÐºÐ¾ÑÑекÑнÑÑ Ð·Ð°Ð¿Ð¸ÑÑÑ WAL ÑнаÑалÑного_lsnдо конÑа WAL.-
pg_get_wal_stats(start_lsn pg_lsn, end_lsn pg_lsn, per_record boolean DEFAULT false) returns setof record ÐÑдаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ вÑем коÑÑекÑнÑм запиÑÑм WAL междÑ
наÑалÑнÑм_lsnиконеÑнÑм_lsn. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑипаменеджеÑа_ÑеÑÑÑÑов(resource_manager). Ðогдапо_ÑипÑ_запиÑÐ¸Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñениеtrue, Ñо возвÑаÑÐ°ÐµÑ Ð¾ÑделÑнÑе ÑÑÑоки Ð´Ð»Ñ ÑазнÑÑÑипов_запиÑей(record_type). ÐÑлинаÑалÑнÑй_lsnиликонеÑнÑй_lsnеÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпнÑ, ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¾ÑибкÑ. ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑии:postgres=# SELECT * FROM pg_get_wal_stats('0/1E847D00', '0/1E84F500') WHERE count > 0 AND "resource_manager/record_type" = 'Transaction' LIMIT 1; -[ RECORD 1 ]----------------+------------------- resource_manager/record_type | Transaction count | 2 count_percentage | 8 record_size | 875 record_size_percentage | 41.23468426013195 fpi_size | 0 fpi_size_percentage | 0 combined_size | 875 combined_size_percentage | 2.8634072910530795-
pg_get_wal_stats_till_end_of_wal(start_lsn pg_lsn, per_record boolean DEFAULT false) returns setof record ÐÑа ÑÑнкÑÐ¸Ñ Ð´ÐµÐ¹ÑÑвÑÐµÑ Ñак же, как
pg_get_wal_stats(), но полÑÑÐ°ÐµÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ вÑем коÑÑекÑнÑм запиÑÑм WAL ÑнаÑалÑного_lsnдо конÑа WAL.
F.57.2. ÐвÑоÑ
ÐÑ
аÑÐ°Ñ Ð ÑпиÑедди (Bharath Rupireddy) <bharath.rupireddyforpostgres@gmail.com>