参数详解 复制进程_如何优化PostgreSQL逻辑复制
How to Optimize PostgreSQL Logical Replication
邏輯復制( Logical Replication )或 Pglogical 是表級別的復制。兩者都是基于 WAL 的復制機制,允許在兩個實例之間復制指定表的WAL 。這兩個看起來讓人迷惑,到底有什么區(qū)別呢? Logical Replication 是 PostgreSQL10.0 引入的內(nèi)置新特性,而 pglogical 則是一個插件。 PG10版本之前可以使用該插件進行邏輯復制,通過持續(xù)發(fā)展, pglogical 的所有特性都集成到了 Logical Replication 中。換句話說, pglogical 插件變成了 Logical Replication 。 Logical Replication 最基本的優(yōu)勢在于不用安裝任何插件,安裝插件受限的環(huán)境中,可以推薦使用該邏輯復制。
本博客關注優(yōu)化 Logical Replication 。這意味著,優(yōu)化方法可以同時應用于 pglogical 以及 Logical Replication 。
作為 DBA ,這種復制機制和其他基于觸發(fā)器的復制機制來說更加可靠,性能更改。邏輯復制的表,發(fā)生變化的數(shù)據(jù)通過 WAL 記錄可以實時復制,這樣更加高效并且也沒那么復雜。所有其他復制機制都是基于觸發(fā)器的,這可能會帶來性能和維護方面的調(diào)整,隨著邏輯復制的出現(xiàn),對基于觸發(fā)器復制的依賴幾乎消失了。
其他博客詳細描述了如何配置邏輯復制: https://severalnines.com/blog/overview-logical-replication-postgresql , 本博客關注如何優(yōu)化。
優(yōu)化邏輯復制
首先, Logical Replication 的行為和流復制非常像,唯一不同的是流復制對整個 database 進行復制,而 Logical Replication 僅復制指定的表。使用邏輯復制時,需要預見一些挑戰(zhàn)。
下面我們看下影響邏輯復制的因素。
影響邏輯復制性能的因素
優(yōu)化邏輯復制時保證無縫復制不會中斷非常重要,在搭建前需要注意幾個問題:
1) 復制表中數(shù)據(jù)類型
2) 復制表或者部分復制表上寫事務的頻繁性
3) 基礎設施的容量
4) 參數(shù)的配置必須最優(yōu)
以上因素對邏輯復制有較大影響,下面我們詳細說明。
邏輯復制數(shù)據(jù)類型
理解邏輯復制表的數(shù)據(jù)類型非常重要。如果表存儲的是 large text 或二進制對象,并且又遇到大規(guī)模事務,那么由于基礎設施資源的限制,復制就會被拖慢。基礎設施的容量必須滿足處理如此規(guī)模的數(shù)據(jù)。
復制表的活躍性
在復制非常活躍的表時,可能由于 IO 性能問題、死鎖等導致復制落后于同步。這肯能使數(shù)據(jù)庫看起來不太健康。如果需要復制的表比較多并且數(shù)據(jù)需要復制到多個階段,那么可能需要很高的 CPU 使用率,并需要更過的 CPU 。
基礎設施的容量
當使用邏輯復制時,首先需要考慮基礎設置的容量。如果需要復制大量表,那么需要充足的 CPU 。
當需要復制大量表時,可以進行分組并使用并行復制。此時也需要多個 CPU 用于并行復制。如果數(shù)據(jù)變化比較頻繁,也會影響復制的性能。
優(yōu)化配置參數(shù)
使用邏輯復制功能,需要調(diào)優(yōu)配置參數(shù):
wal_level= ’ logical ’
max_wal_senders=10 # greater than number of subscribers (or replicas)
max_replication_slots=10 # greater than number of subscribers (or replicas)
max_worker_processes=10 # greater than number of subscribers (or replicas)
max_logical_replication_workers # greater than number of subscribers (or replicas)
max_sync_workers_per_subscription # depends on number of tables being replicated
max_wal_senders
max_wal_senders 配置值需要大于備機個數(shù)。如果數(shù)據(jù)需要復制到多個節(jié)點,那么 max_wal_senders 就開始起作用,因此這個參數(shù)調(diào)整到最優(yōu)很重要。
max_replication_slots
通常,數(shù)據(jù)的變化會寫入到 WAL 文件中,被稱為 WAL 記錄。 WAL sender 進程會將這些 WAL 日志發(fā)送到備機,備機的 wal receiver 進程接收這些 WAL ,然后訂閱節(jié)點回放這些 WAL 。
Checkpoint 后,可以將 pg_xlog/pg_wal 中不需要的 wal 文件刪除。如果這些 WAL 沒有在訂閱節(jié)點回放完時,將這些主機上的文件刪除,那么復制就會中斷。提供復制槽,可以確保當訂閱節(jié)點還需要時,主機上的文件不被刪除。建議對于每個訂閱節(jié)點都配置一個復制槽。
max_worker_processes
配置最優(yōu)的 worker 進程數(shù)也很重要。這依賴于服務最大能夠擁有多少進程。在多 CPU 的環(huán)境中才會有效。 max_worker_processes 通過使用多個 CPU 核,促使進程以更快的方式完成任務。當使用邏輯復制時,這個參數(shù)可以幫助 worker 進程復制更快。還有一個max_logical_worker_processes 參數(shù),指定使用多少 worker 進程復制數(shù)據(jù)。
max_logical_worker_processes
這個參數(shù)指定最多需要多少 logical worker 進程復制數(shù)據(jù)。 max_logical_worker_processes 的進程隸屬于 max_worker_processes ,比max_worker_processes 小。多 CPU 的環(huán)境,復制到多個訂閱節(jié)點,這個參數(shù)才有意義。默認值是 4 ,最大值依賴于系統(tǒng)支持最多 worker 進程數(shù)。
max_sync_workers_per_subscription
這個參數(shù)指定每個訂閱最多需要多少同步進程。初始數(shù)據(jù)同步期間,同步進程開始工作,使用整個從那時候可以確保同步更快。目前,一個表只能配置一個同步進程,這意味著多個表可以并行同步。默認值是 2 ,這個值隸屬于 max_logical_worker_processes 。
其他參數(shù)包括: wal_receiver_timeout, wal_receiver_status_interval and wal_retrieve_retry_interval ,當然這幾個參數(shù)不會影響發(fā)布節(jié)點。
結論
在復雜的大規(guī)模數(shù)據(jù)庫系統(tǒng)中,復制指定表是常見的需求。邏輯復制可以用于業(yè)務報告和數(shù)據(jù)倉庫。作為一個 DBA ,我認為由于邏輯復制部署簡單,非常適合這樣的場景。配置調(diào)優(yōu)邏輯復制,需要大量的計劃、架構、測試。為了確保復制系統(tǒng)的有效性和可用性,使用邏輯復制時需要評估實時復制的數(shù)據(jù)量。綜上所述, PG10 及其之后的版本可以使用邏輯復制,而之前的版本可以使用 pglogical 。
原文
https://severalnines.com/blog/how-optimize-postgresql-logical-replication
總結
以上是生活随笔為你收集整理的参数详解 复制进程_如何优化PostgreSQL逻辑复制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gateway 过滤器执行顺序_Gate
- 下一篇: activiti mysql 版本_My