Copyright©2018 NTT Corp. All Rights Reserved.
PostgreSQL Major Version
Upgrade Using built-in
Logical Replication
NTT OSS Center
Atsushi Torikoshi
PGConf.ASIA 2018
22Copyright©2018 NTT Corp. All Rights Reserved.
• Upgrading PostgreSQL cluster
• Introduction to Logical Replication
• Architecture and Behavior of Logical
Replication
• Major version upgrade using logical
replication
Agenda
33Copyright©2018 NTT Corp. All Rights Reserved.
Upgrading
PostgreSQL Cluster
44Copyright©2018 NTT Corp. All Rights Reserved.
Minor Version Upgrade
• e.g. 9.6.0 -> 9.6.1, 10.3 -> 10.6
• always compatible with earlier and later minor releases
• just need upgrade the PostgreSQL binary
Major Version Upgrade
• e.g. 9.5.1 -> 9.6.15, 10.2 -> 11.1
• not always compatible, the internal data storage format can be
changed
• upgrading the PostgreSQL binary is not enough, it needs also
upgrading data files
⇒ several ways for major version upgrade
2 types of version upgrade
55Copyright©2018 NTT Corp. All Rights Reserved.
pg_dump
o the traditional way for major version up
x service downtime during dump and restore
pg_upgrade
o faster than pg_dump
x shorter than pg_dump, but it still needs service downtime
link mode is much faster, but you cannot go back the original
cluster once you start up the new one
Logical Replication
o it doesn't need stop PostgreSQL service during replication
⇒ near zero downtime
x built-in logical replication is supported only after version 10
3 ways for major version upgrade
66Copyright©2018 NTT Corp. All Rights Reserved.
Introduction to
Logical Replication
77Copyright©2018 NTT Corp. All Rights Reserved.
Physical Replication replicates a whole DB cluster
by sending & replaying all the WAL.
Looking back Physical Replication
Upstream Downstream
sendTable
Table
Table
WALWAL WALWAL Table
Table
Table
replay
88Copyright©2018 NTT Corp. All Rights Reserved.
Physical Replication cannot do things like:
• partial replication(partial data, partial manipulation)
• replication between different OS arc/major version
PostgreSQL
Logical Replication has added flexibility to built-in
replication and made these things possible.
Motivations for Logical Replication
Upstream Downstream
decode, sendTable
Table
Table
WALWAL WALWAL Table
Table
apply
write
99Copyright©2018 NTT Corp. All Rights Reserved.
So, how can we upgrade our
cluster with Logical Replication?
1010Copyright©2018 NTT Corp. All Rights Reserved.
1. Create a new cluster
How can we upgrade our cluster with
Logical Replication?
Current New
APP
1111Copyright©2018 NTT Corp. All Rights Reserved.
1. Create a new cluster
2. Start Logical Replication
How can we upgrade our cluster with
Logical Replication?
Current New
APP
1212Copyright©2018 NTT Corp. All Rights Reserved.
1. Create a new cluster
2. Start Logical Replication
3. Switch access point
How can we upgrade our cluster with
Logical Replication?
Current New
APP
1313Copyright©2018 NTT Corp. All Rights Reserved.
1. Create a new cluster
2. Start Logical Replication
3. Switch access point
That’s all. It’s a piece of cake!
How can we upgrade our cluster with
Logical Replication?
Current New
APP
1414Copyright©2018 NTT Corp. All Rights Reserved.
1. Create a new cluster
2. Start Logical Replication
3. Switch access point
That’s all. It’s a piece of cake!
Logical Replication has some limitations and does
characteristic behaviors.
How can we upgrade our cluster with
Logical Replication?
Current New
APP
1515Copyright©2018 NTT Corp. All Rights Reserved.
Architecture and Behaviors
of Logical Replication
1616Copyright©2018 NTT Corp. All Rights Reserved.
• ‘walsender’ and ‘apply worker’ do most of the
works for Logical Replication.
Basics of the architecture
WAL
wal
sender
Publisher (upstream)
write
apply
worker
launcher
launch
Subscriber(downstream)
backend
process
read
decode
backend
process
1717Copyright©2018 NTT Corp. All Rights Reserved.
• ‘walsender’ and ‘apply worker’ do most of the
works for Logical Replication.
• ‘sync worker’ and the corresponding ‘walsender’
run only at initial table sync.
Basics of the architecture
WAL
wal
sender
Publisher (upstream)
write
wal
sender
apply
worker
launcher
sync
worker
launch
launch
Subscriber(downstream)
backend
process
read
decode
backend
process
1818Copyright©2018 NTT Corp. All Rights Reserved.
• walsender reads all WAL and decodes* them.
Then walsender sends some of them to the
subscriber.
• apply worker applies that change.
*decoding needs the most detailed WAL: wal_level = logical
Basics of the architecture ~replication
WAL
backend
process
wal
sender
Publisher
write
read
apply
worker
Subscriber
TableTableTable
write
decode
send
change
1919Copyright©2018 NTT Corp. All Rights Reserved.
Basics of the architecture ~replication
WAL
walsender
INSERT
UPDATE
UPDATE
DELETE
UPDATE apply
worker
Publisher Subscriber
:transaction
• walsender reassembles queries according to its
transaction.
• When INSERT, UPDATE or DELETE is placed,
walsender keeps that change in memory.
2020Copyright©2018 NTT Corp. All Rights Reserved.
• walsender reassembles queries according to its
transaction.
• When INSERT, UPDATE or DELETE is placed,
walsender keeps that change in memory.
Basics of the architecture ~replication
WAL
walsender
INSERT
UPDATE
UPDATE
DELETE
UPDATE
1. read WAL
apply
worker
Publisher Subscriber
:transaction
2121Copyright©2018 NTT Corp. All Rights Reserved.
Basics of the architecture ~replication
WAL
walsender
INSERT
INSERT
UPDATE
UPDATE
DELETE
UPDATE
1. read WAL
2. decode
apply
worker
Publisher Subscriber
:transaction
• walsender reassembles queries according to its
transaction.
• When INSERT, UPDATE or DELETE is placed,
walsender keeps that change in memory.
2222Copyright©2018 NTT Corp. All Rights Reserved.
Basics of the architecture ~replication
WAL
walsender
INSERT
INSERT
UPDATE
UPDATE
DELETE
UPDATE
1. read WAL
2. decode
3. reassemble
by transaction
apply
worker
Publisher Subscriber
:transaction
INSERT
• walsender reassembles queries according to its
transaction.
• When INSERT, UPDATE or DELETE is placed,
walsender keeps that change in memory.
2323Copyright©2018 NTT Corp. All Rights Reserved.
• When the decoded result is COMMIT,
‘walsender’ sends all the changes for that
transaction to subscriber.
Basics of the architecture ~replication
:transaction
WAL
apply
worker
walsender
COMMIT
INSERT
UPDATE
UPDATE
DELETE
UPDATE
1. read WAL
2. decode
4. send
Publisher Subscriber
3. reassemble
by transaction
COMMIT
2424Copyright©2018 NTT Corp. All Rights Reserved.
• When the decoded result is ROLLBACK,
walsender just throws away the changes for that
transaction.
Basics of the architecture ~replication
:transaction
WAL
walsender
ROLLBACK
INSERT
UPDATE
UPDATE
DELETE
UPDATE
ROLLBACK
1. read WAL
2. decode
4. cleanup
apply
worker
Publisher Subscriber
3. reassemble
by transaction
2525Copyright©2018 NTT Corp. All Rights Reserved.
• When the decoded result is ROLLBACK,
walsender just throws away the changes for that
transaction.
Basics of the architecture ~replication
:transaction
WAL
walsender
ROLLBACK
INSERT
UPDATE
UPDATE
DELETE
1. read WAL
2. decode
4. cleanup
apply
worker
Publisher Subscriber
3. reassemble
by transaction
2626Copyright©2018 NTT Corp. All Rights Reserved.
• walsender reassembles queries by its
transaction.
• When the decoded result is DDL, walsender does
NOT replicate it.
Basics of the architecture ~replication
WAL
walsender
INSERT
UPDATE
UPDATE
DELETE
UPDATE apply
worker
Publisher Subscriber
:transaction
CREATE
NOT replicated
2727Copyright©2018 NTT Corp. All Rights Reserved.
• At initial table synchronization, COPY runs.
• COPY is done by dedicated walsender and sync
worker. These processes exit after COPY is done.
Initial table synchronization
WAL
backend
process
wal
sender
Publisher
write
read
apply
worker
Subscriber
TableTableTable
sync
worker
wal
sender
write
(COPY)
2828Copyright©2018 NTT Corp. All Rights Reserved.
1. Logical Replication does NOT replicate all
the data & manipulations
2. It needs additional information on WAL
3. It does initial table synchronization using
COPY
4. It transmits data per transaction
Summary of the architecture and behavior
2929Copyright©2018 NTT Corp. All Rights Reserved.
Major version upgrade
using
Logical Replication
3030Copyright©2018 NTT Corp. All Rights Reserved.
1. Logical Replication does NOT replicate
all the data & manipulation
3131Copyright©2018 NTT Corp. All Rights Reserved.
Following objects are not replicated.
• view
• materialized view
• Foreign table
• Partition root table
1. Logical Replication does NOT replicate all
3232Copyright©2018 NTT Corp. All Rights Reserved.
Following objects are not replicated.
• view
• materialized view
• Foreign table
• Partition root table
⇒ These objects can be created data on new DB.
Create them before switching
1. Logical Replication does NOT replicate all
3333Copyright©2018 NTT Corp. All Rights Reserved.
• Large objects
1. Logical Replication does NOT replicate all
3434Copyright©2018 NTT Corp. All Rights Reserved.
• Large objects
⇒ After completion of the replication, run pg_dump
only on the large objects and restore them.
During this operation, APP needs stop updating
1. Logical Replication does NOT replicate all
3535Copyright©2018 NTT Corp. All Rights Reserved.
• Large objects
⇒ After completion of the replication, run pg_dump
only on the large objects and restore them.
During this operation, APP needs stop updating.
or
Migrate large objects to normal table
1. Logical Replication does NOT replicate all
3636Copyright©2018 NTT Corp. All Rights Reserved.
• Sequence
Data generated by sequence are replicated, but sequence objects
themselves are NOT replicated
1. Logical Replication does NOT replicate all
3737Copyright©2018 NTT Corp. All Rights Reserved.
• Sequence
Data generated by sequence are replicated, but sequence objects
themselves are NOT replicated
⇒ After completion of the replication, run
pg_dump only on the sequence and restore it.
During this operation, APP needs stop updating
sequences
1. Logical Replication does NOT replicate all
3838Copyright©2018 NTT Corp. All Rights Reserved.
• DDL
1. Logical Replication does NOT replicate all
3939Copyright©2018 NTT Corp. All Rights Reserved.
• DDL
⇒ If any DDL commands have to be run during
replication, run them also on subscriber
1. Logical Replication does NOT replicate all
4040Copyright©2018 NTT Corp. All Rights Reserved.
• DDL
⇒ If any DDL commands have to be run during
replication, run them also on subscriber
About partition child table
If partition child tables are created by trigger, it may be possible
to run the trigger on subscriber using ENABLE ALWAYS TRIGGER
NOTE: Even when using ENABLE ALWAYS TRIGGER, some kind of
triggers aren't replicated
e.g. UPDATE OF .. FOR EACH ROW
1. Logical Replication does NOT replicate all
4141Copyright©2018 NTT Corp. All Rights Reserved.
• TRUNCATE(~ver 10)
1. Logical Replication does NOT replicate all
4242Copyright©2018 NTT Corp. All Rights Reserved.
• TRUNCATE(~ver 10)
⇒ Substitute DELETE for TRUNCATE
PostgreSQL 11 replicates TRUNCATE☺
1. Logical Replication does NOT replicate all
4343Copyright©2018 NTT Corp. All Rights Reserved.
• Unlogged table
The basic idea of logical replication is decoding WAL
When there are no WAL, how can we do that?
• Global objects
The unit of Logical Replication is database, but global objects
belong to database cluster.
1. Logical Replication does NOT replicate all
4444Copyright©2018 NTT Corp. All Rights Reserved.
• Unlogged table
The basic idea of logical replication is decoding WAL
When there are no WAL, how can we do that?
⇒ pg_dump
• Global objects
The unit of Logical Replication is database, but global objects
belong to database cluster.
⇒ pg_dumpall
1. Logical Replication does NOT replicate all
4545Copyright©2018 NTT Corp. All Rights Reserved.
2. Logical Replication needs additional
information on WAL
4646Copyright©2018 NTT Corp. All Rights Reserved.
Consideration for performance:
• wal_level = ‘logical’ is most detailed log level.
• UPDATE and DELETE on tables need ‘replica
identity’
• The default of the replica identity is primary key.
• If there are no primary key or suitable columns, set replica
identity 'full', which means the entire row becomes the key.
2. needs additional information on WAL
4747Copyright©2018 NTT Corp. All Rights Reserved.
Performance and WAL size impacts by wal_level and replica
identity
• Amount of WAL
• Response time
2. needs additional information on WAL
wal_level replica identity ⊿LSN Ratio of ⊿LSN
logical full 21179088 1.49
logical default 16763896 1.18
replica - 14252616 1
wal_level replica identity avg(response) diff(avg(response))
Logical full 2.132ms -0.020ms
logical default 2.126ms -0.026ms
replica - 2.152ms -
1 minute pgbench on PostgreSQL 10
4848Copyright©2018 NTT Corp. All Rights Reserved.
3. Initial table synchronization using COPY
4949Copyright©2018 NTT Corp. All Rights Reserved.
initial table sync doesn't have parameters which
restrict the speed of COPY directly.
It may give performance impact on APP
3. initial table synchronization using COPY
5050Copyright©2018 NTT Corp. All Rights Reserved.
Adding some delay on network using command tc
relieved the impact on client queries
3. initial table synchronization using COPY
No delay 100ms delay
ms
5151Copyright©2018 NTT Corp. All Rights Reserved.
Under some environments, initial table
synchronization didn’t consume all the resources
because walsenders waited for client responses
In this case, we could improve the performance by
increasing max_sync_workers_per_subscription
3. initial table synchronization using COPY
sync worker = 1 sync worker = 8
kB/s kB/s
5252Copyright©2018 NTT Corp. All Rights Reserved.
4. Transmission per transaction
5353Copyright©2018 NTT Corp. All Rights Reserved.
walsender keeps each change of a transaction until
COMMIT or ROLLBACK
It may cause walsender to use a lot of memory.
4. Transmission per transaction
walsender
INSERT
UPDATE
UPDATE
DELETE
UPDATE
Publisher
INSERT
INSERT
UPDATE
UPDATE
DELETE
UPDATE
UPDATE
DELETE
apply
worker
Subscriber
5454Copyright©2018 NTT Corp. All Rights Reserved.
4. Transmission per transaction
Type of manipulation Measuresto prevent memory use Risk
long transactions No feature high
many transactions
many savepoints
many changes in one
transaction
When the number of
changes in one transaction
exceeds 4096, It has a
feature to spill out the
change to disk.
Low
5555Copyright©2018 NTT Corp. All Rights Reserved.
Major upgrade with Logical replication is possible, but it’s
not piece of cake.
We should watch out for its limitations and behavior such
as:
• Some data & manipulations are not replicated
⇒ there may be workarounds
• Additional information for replication is necessary
⇒ It seems that does not give critical impact
Summary
5656Copyright©2018 NTT Corp. All Rights Reserved.
• Initial sync may give performance impact on APP
⇒ Tuning on PostgreSQL or network may moderate it
• Long or many transactions and many savepoints may lead
much memory consumption
⇒ Confirm the way of transactions run
Summary
5757Copyright©2018 NTT Corp. All Rights Reserved.
Thanks for your cooperation!
Shinya Okano@Metro Systems
Hibiki Tanaka@Metro Systems
5858Copyright©2018 NTT Corp. All Rights Reserved.
Thanks for listening!
5959Copyright©2018 NTT Corp. All Rights Reserved.
Comparison between Logical and Physical
Replication
Physical Logical
way of the
replication
log shipping row-based replication
downstream DB copy of the
upstream DB
not necessarily the same as upstream DB
manipulations for
downstream DB
restricted
SELECT, PREPARE,
EXECUTE ..
No restrictions, but some manipulations
may lead to conflict
What is replicated ALL views, partition root tables, large objects
and some manipulations including DDL are
NOT replicated
purpose of use high availability
load balancing
fine-grained replication
replication between different
environments

PostgreSQL major version upgrade using built in Logical Replication

  • 1.
    Copyright©2018 NTT Corp.All Rights Reserved. PostgreSQL Major Version Upgrade Using built-in Logical Replication NTT OSS Center Atsushi Torikoshi PGConf.ASIA 2018
  • 2.
    22Copyright©2018 NTT Corp.All Rights Reserved. • Upgrading PostgreSQL cluster • Introduction to Logical Replication • Architecture and Behavior of Logical Replication • Major version upgrade using logical replication Agenda
  • 3.
    33Copyright©2018 NTT Corp.All Rights Reserved. Upgrading PostgreSQL Cluster
  • 4.
    44Copyright©2018 NTT Corp.All Rights Reserved. Minor Version Upgrade • e.g. 9.6.0 -> 9.6.1, 10.3 -> 10.6 • always compatible with earlier and later minor releases • just need upgrade the PostgreSQL binary Major Version Upgrade • e.g. 9.5.1 -> 9.6.15, 10.2 -> 11.1 • not always compatible, the internal data storage format can be changed • upgrading the PostgreSQL binary is not enough, it needs also upgrading data files ⇒ several ways for major version upgrade 2 types of version upgrade
  • 5.
    55Copyright©2018 NTT Corp.All Rights Reserved. pg_dump o the traditional way for major version up x service downtime during dump and restore pg_upgrade o faster than pg_dump x shorter than pg_dump, but it still needs service downtime link mode is much faster, but you cannot go back the original cluster once you start up the new one Logical Replication o it doesn't need stop PostgreSQL service during replication ⇒ near zero downtime x built-in logical replication is supported only after version 10 3 ways for major version upgrade
  • 6.
    66Copyright©2018 NTT Corp.All Rights Reserved. Introduction to Logical Replication
  • 7.
    77Copyright©2018 NTT Corp.All Rights Reserved. Physical Replication replicates a whole DB cluster by sending & replaying all the WAL. Looking back Physical Replication Upstream Downstream sendTable Table Table WALWAL WALWAL Table Table Table replay
  • 8.
    88Copyright©2018 NTT Corp.All Rights Reserved. Physical Replication cannot do things like: • partial replication(partial data, partial manipulation) • replication between different OS arc/major version PostgreSQL Logical Replication has added flexibility to built-in replication and made these things possible. Motivations for Logical Replication Upstream Downstream decode, sendTable Table Table WALWAL WALWAL Table Table apply write
  • 9.
    99Copyright©2018 NTT Corp.All Rights Reserved. So, how can we upgrade our cluster with Logical Replication?
  • 10.
    1010Copyright©2018 NTT Corp.All Rights Reserved. 1. Create a new cluster How can we upgrade our cluster with Logical Replication? Current New APP
  • 11.
    1111Copyright©2018 NTT Corp.All Rights Reserved. 1. Create a new cluster 2. Start Logical Replication How can we upgrade our cluster with Logical Replication? Current New APP
  • 12.
    1212Copyright©2018 NTT Corp.All Rights Reserved. 1. Create a new cluster 2. Start Logical Replication 3. Switch access point How can we upgrade our cluster with Logical Replication? Current New APP
  • 13.
    1313Copyright©2018 NTT Corp.All Rights Reserved. 1. Create a new cluster 2. Start Logical Replication 3. Switch access point That’s all. It’s a piece of cake! How can we upgrade our cluster with Logical Replication? Current New APP
  • 14.
    1414Copyright©2018 NTT Corp.All Rights Reserved. 1. Create a new cluster 2. Start Logical Replication 3. Switch access point That’s all. It’s a piece of cake! Logical Replication has some limitations and does characteristic behaviors. How can we upgrade our cluster with Logical Replication? Current New APP
  • 15.
    1515Copyright©2018 NTT Corp.All Rights Reserved. Architecture and Behaviors of Logical Replication
  • 16.
    1616Copyright©2018 NTT Corp.All Rights Reserved. • ‘walsender’ and ‘apply worker’ do most of the works for Logical Replication. Basics of the architecture WAL wal sender Publisher (upstream) write apply worker launcher launch Subscriber(downstream) backend process read decode backend process
  • 17.
    1717Copyright©2018 NTT Corp.All Rights Reserved. • ‘walsender’ and ‘apply worker’ do most of the works for Logical Replication. • ‘sync worker’ and the corresponding ‘walsender’ run only at initial table sync. Basics of the architecture WAL wal sender Publisher (upstream) write wal sender apply worker launcher sync worker launch launch Subscriber(downstream) backend process read decode backend process
  • 18.
    1818Copyright©2018 NTT Corp.All Rights Reserved. • walsender reads all WAL and decodes* them. Then walsender sends some of them to the subscriber. • apply worker applies that change. *decoding needs the most detailed WAL: wal_level = logical Basics of the architecture ~replication WAL backend process wal sender Publisher write read apply worker Subscriber TableTableTable write decode send change
  • 19.
    1919Copyright©2018 NTT Corp.All Rights Reserved. Basics of the architecture ~replication WAL walsender INSERT UPDATE UPDATE DELETE UPDATE apply worker Publisher Subscriber :transaction • walsender reassembles queries according to its transaction. • When INSERT, UPDATE or DELETE is placed, walsender keeps that change in memory.
  • 20.
    2020Copyright©2018 NTT Corp.All Rights Reserved. • walsender reassembles queries according to its transaction. • When INSERT, UPDATE or DELETE is placed, walsender keeps that change in memory. Basics of the architecture ~replication WAL walsender INSERT UPDATE UPDATE DELETE UPDATE 1. read WAL apply worker Publisher Subscriber :transaction
  • 21.
    2121Copyright©2018 NTT Corp.All Rights Reserved. Basics of the architecture ~replication WAL walsender INSERT INSERT UPDATE UPDATE DELETE UPDATE 1. read WAL 2. decode apply worker Publisher Subscriber :transaction • walsender reassembles queries according to its transaction. • When INSERT, UPDATE or DELETE is placed, walsender keeps that change in memory.
  • 22.
    2222Copyright©2018 NTT Corp.All Rights Reserved. Basics of the architecture ~replication WAL walsender INSERT INSERT UPDATE UPDATE DELETE UPDATE 1. read WAL 2. decode 3. reassemble by transaction apply worker Publisher Subscriber :transaction INSERT • walsender reassembles queries according to its transaction. • When INSERT, UPDATE or DELETE is placed, walsender keeps that change in memory.
  • 23.
    2323Copyright©2018 NTT Corp.All Rights Reserved. • When the decoded result is COMMIT, ‘walsender’ sends all the changes for that transaction to subscriber. Basics of the architecture ~replication :transaction WAL apply worker walsender COMMIT INSERT UPDATE UPDATE DELETE UPDATE 1. read WAL 2. decode 4. send Publisher Subscriber 3. reassemble by transaction COMMIT
  • 24.
    2424Copyright©2018 NTT Corp.All Rights Reserved. • When the decoded result is ROLLBACK, walsender just throws away the changes for that transaction. Basics of the architecture ~replication :transaction WAL walsender ROLLBACK INSERT UPDATE UPDATE DELETE UPDATE ROLLBACK 1. read WAL 2. decode 4. cleanup apply worker Publisher Subscriber 3. reassemble by transaction
  • 25.
    2525Copyright©2018 NTT Corp.All Rights Reserved. • When the decoded result is ROLLBACK, walsender just throws away the changes for that transaction. Basics of the architecture ~replication :transaction WAL walsender ROLLBACK INSERT UPDATE UPDATE DELETE 1. read WAL 2. decode 4. cleanup apply worker Publisher Subscriber 3. reassemble by transaction
  • 26.
    2626Copyright©2018 NTT Corp.All Rights Reserved. • walsender reassembles queries by its transaction. • When the decoded result is DDL, walsender does NOT replicate it. Basics of the architecture ~replication WAL walsender INSERT UPDATE UPDATE DELETE UPDATE apply worker Publisher Subscriber :transaction CREATE NOT replicated
  • 27.
    2727Copyright©2018 NTT Corp.All Rights Reserved. • At initial table synchronization, COPY runs. • COPY is done by dedicated walsender and sync worker. These processes exit after COPY is done. Initial table synchronization WAL backend process wal sender Publisher write read apply worker Subscriber TableTableTable sync worker wal sender write (COPY)
  • 28.
    2828Copyright©2018 NTT Corp.All Rights Reserved. 1. Logical Replication does NOT replicate all the data & manipulations 2. It needs additional information on WAL 3. It does initial table synchronization using COPY 4. It transmits data per transaction Summary of the architecture and behavior
  • 29.
    2929Copyright©2018 NTT Corp.All Rights Reserved. Major version upgrade using Logical Replication
  • 30.
    3030Copyright©2018 NTT Corp.All Rights Reserved. 1. Logical Replication does NOT replicate all the data & manipulation
  • 31.
    3131Copyright©2018 NTT Corp.All Rights Reserved. Following objects are not replicated. • view • materialized view • Foreign table • Partition root table 1. Logical Replication does NOT replicate all
  • 32.
    3232Copyright©2018 NTT Corp.All Rights Reserved. Following objects are not replicated. • view • materialized view • Foreign table • Partition root table ⇒ These objects can be created data on new DB. Create them before switching 1. Logical Replication does NOT replicate all
  • 33.
    3333Copyright©2018 NTT Corp.All Rights Reserved. • Large objects 1. Logical Replication does NOT replicate all
  • 34.
    3434Copyright©2018 NTT Corp.All Rights Reserved. • Large objects ⇒ After completion of the replication, run pg_dump only on the large objects and restore them. During this operation, APP needs stop updating 1. Logical Replication does NOT replicate all
  • 35.
    3535Copyright©2018 NTT Corp.All Rights Reserved. • Large objects ⇒ After completion of the replication, run pg_dump only on the large objects and restore them. During this operation, APP needs stop updating. or Migrate large objects to normal table 1. Logical Replication does NOT replicate all
  • 36.
    3636Copyright©2018 NTT Corp.All Rights Reserved. • Sequence Data generated by sequence are replicated, but sequence objects themselves are NOT replicated 1. Logical Replication does NOT replicate all
  • 37.
    3737Copyright©2018 NTT Corp.All Rights Reserved. • Sequence Data generated by sequence are replicated, but sequence objects themselves are NOT replicated ⇒ After completion of the replication, run pg_dump only on the sequence and restore it. During this operation, APP needs stop updating sequences 1. Logical Replication does NOT replicate all
  • 38.
    3838Copyright©2018 NTT Corp.All Rights Reserved. • DDL 1. Logical Replication does NOT replicate all
  • 39.
    3939Copyright©2018 NTT Corp.All Rights Reserved. • DDL ⇒ If any DDL commands have to be run during replication, run them also on subscriber 1. Logical Replication does NOT replicate all
  • 40.
    4040Copyright©2018 NTT Corp.All Rights Reserved. • DDL ⇒ If any DDL commands have to be run during replication, run them also on subscriber About partition child table If partition child tables are created by trigger, it may be possible to run the trigger on subscriber using ENABLE ALWAYS TRIGGER NOTE: Even when using ENABLE ALWAYS TRIGGER, some kind of triggers aren't replicated e.g. UPDATE OF .. FOR EACH ROW 1. Logical Replication does NOT replicate all
  • 41.
    4141Copyright©2018 NTT Corp.All Rights Reserved. • TRUNCATE(~ver 10) 1. Logical Replication does NOT replicate all
  • 42.
    4242Copyright©2018 NTT Corp.All Rights Reserved. • TRUNCATE(~ver 10) ⇒ Substitute DELETE for TRUNCATE PostgreSQL 11 replicates TRUNCATE☺ 1. Logical Replication does NOT replicate all
  • 43.
    4343Copyright©2018 NTT Corp.All Rights Reserved. • Unlogged table The basic idea of logical replication is decoding WAL When there are no WAL, how can we do that? • Global objects The unit of Logical Replication is database, but global objects belong to database cluster. 1. Logical Replication does NOT replicate all
  • 44.
    4444Copyright©2018 NTT Corp.All Rights Reserved. • Unlogged table The basic idea of logical replication is decoding WAL When there are no WAL, how can we do that? ⇒ pg_dump • Global objects The unit of Logical Replication is database, but global objects belong to database cluster. ⇒ pg_dumpall 1. Logical Replication does NOT replicate all
  • 45.
    4545Copyright©2018 NTT Corp.All Rights Reserved. 2. Logical Replication needs additional information on WAL
  • 46.
    4646Copyright©2018 NTT Corp.All Rights Reserved. Consideration for performance: • wal_level = ‘logical’ is most detailed log level. • UPDATE and DELETE on tables need ‘replica identity’ • The default of the replica identity is primary key. • If there are no primary key or suitable columns, set replica identity 'full', which means the entire row becomes the key. 2. needs additional information on WAL
  • 47.
    4747Copyright©2018 NTT Corp.All Rights Reserved. Performance and WAL size impacts by wal_level and replica identity • Amount of WAL • Response time 2. needs additional information on WAL wal_level replica identity ⊿LSN Ratio of ⊿LSN logical full 21179088 1.49 logical default 16763896 1.18 replica - 14252616 1 wal_level replica identity avg(response) diff(avg(response)) Logical full 2.132ms -0.020ms logical default 2.126ms -0.026ms replica - 2.152ms - 1 minute pgbench on PostgreSQL 10
  • 48.
    4848Copyright©2018 NTT Corp.All Rights Reserved. 3. Initial table synchronization using COPY
  • 49.
    4949Copyright©2018 NTT Corp.All Rights Reserved. initial table sync doesn't have parameters which restrict the speed of COPY directly. It may give performance impact on APP 3. initial table synchronization using COPY
  • 50.
    5050Copyright©2018 NTT Corp.All Rights Reserved. Adding some delay on network using command tc relieved the impact on client queries 3. initial table synchronization using COPY No delay 100ms delay ms
  • 51.
    5151Copyright©2018 NTT Corp.All Rights Reserved. Under some environments, initial table synchronization didn’t consume all the resources because walsenders waited for client responses In this case, we could improve the performance by increasing max_sync_workers_per_subscription 3. initial table synchronization using COPY sync worker = 1 sync worker = 8 kB/s kB/s
  • 52.
    5252Copyright©2018 NTT Corp.All Rights Reserved. 4. Transmission per transaction
  • 53.
    5353Copyright©2018 NTT Corp.All Rights Reserved. walsender keeps each change of a transaction until COMMIT or ROLLBACK It may cause walsender to use a lot of memory. 4. Transmission per transaction walsender INSERT UPDATE UPDATE DELETE UPDATE Publisher INSERT INSERT UPDATE UPDATE DELETE UPDATE UPDATE DELETE apply worker Subscriber
  • 54.
    5454Copyright©2018 NTT Corp.All Rights Reserved. 4. Transmission per transaction Type of manipulation Measuresto prevent memory use Risk long transactions No feature high many transactions many savepoints many changes in one transaction When the number of changes in one transaction exceeds 4096, It has a feature to spill out the change to disk. Low
  • 55.
    5555Copyright©2018 NTT Corp.All Rights Reserved. Major upgrade with Logical replication is possible, but it’s not piece of cake. We should watch out for its limitations and behavior such as: • Some data & manipulations are not replicated ⇒ there may be workarounds • Additional information for replication is necessary ⇒ It seems that does not give critical impact Summary
  • 56.
    5656Copyright©2018 NTT Corp.All Rights Reserved. • Initial sync may give performance impact on APP ⇒ Tuning on PostgreSQL or network may moderate it • Long or many transactions and many savepoints may lead much memory consumption ⇒ Confirm the way of transactions run Summary
  • 57.
    5757Copyright©2018 NTT Corp.All Rights Reserved. Thanks for your cooperation! Shinya Okano@Metro Systems Hibiki Tanaka@Metro Systems
  • 58.
    5858Copyright©2018 NTT Corp.All Rights Reserved. Thanks for listening!
  • 59.
    5959Copyright©2018 NTT Corp.All Rights Reserved. Comparison between Logical and Physical Replication Physical Logical way of the replication log shipping row-based replication downstream DB copy of the upstream DB not necessarily the same as upstream DB manipulations for downstream DB restricted SELECT, PREPARE, EXECUTE .. No restrictions, but some manipulations may lead to conflict What is replicated ALL views, partition root tables, large objects and some manipulations including DDL are NOT replicated purpose of use high availability load balancing fine-grained replication replication between different environments