哪些网站的活动策划做的好,卖鞋做哪个网站好,地方门户网站系统有哪些,广州建设技术职业学院官网1. 流复制和逻辑复制的差异
逻辑复制和流复制最直观的不同是#xff0c;逻辑复制支持表级别复制区分点事原理不同 逻辑日志是在wal日志产生的数据库上#xff0c;由逻辑解析模块对wal日志进行初步的解析#xff0c;解析结果是ReorderBufferChange#xff08;理解为HeapTup…1. 流复制和逻辑复制的差异
逻辑复制和流复制最直观的不同是逻辑复制支持表级别复制区分点事原理不同 逻辑日志是在wal日志产生的数据库上由逻辑解析模块对wal日志进行初步的解析解析结果是ReorderBufferChange理解为HeapTupleData再由pgoutput plugin对中间结果进行过滤和消息化拼接然后将其发送到订阅端订阅端根据接受到的Heap TupleData重新对其执行insert、delete、udpate操作流复制时将数据从walrecord拷贝到数据页逻辑复制时将数据重新执行一次insert、update或delete
2. 流复制
流复制面对未提交的事务事务没有提交也会同步到备机当主库进行提交和回滚的时候也会同步进行提交和回滚。对大事务相对友好流复制会导致备机也会产生大量死元祖需要做vacuum流复制时将wal日志中记录的内容按照确切的块地址逐字节的拷贝到备库因此主备之间数据分布是一样的意味着主备机器上同一条记录的ctid是相同的
3. 流复制的实现原理 后端进程通过执行XLogInsert和XLogFlush函数将wal数据写入并刷新到WAL段文件中walsender进程将写入wal段的wal数据发送给walreveiver进程发送wal数据后后端进程继续等待备用服务器的ACK响应。更准确的说后端进行通过执行内部函数SyncRepWaitForLSN获得一个latch并等待他被释放备用服务器上的walreveiver将接受到的wal数据写入备用的wal段中使用write系统调用并向walsender返回一次ACK响应walreveiver使用如fsync等系统调用将wal数据刷新到wal段向walsender返回另一个ACK响应并通知启动进程关于wal数据的刷新startup进程回访已写入wal段的wal数据当walsender收到walreveiver的ack响应时释放后端进程的latch然后后端进程的提交或中止操作将完成。latch释放的时机取决于参数synchronous_commit如果设置为on当收到步骤5的ACK时释放latch如果设置为remote_wirte则在收到步骤3的ACK时释放latch
ACK的包括内容
写入最新wal数据的lsn位置刷新最新wal数据的lsn位置在启动过程中回放最新wal数据的lsn位置发送此响应的时间戳
过程分析
主库的进程进行写操作产生WAL recordwalsender感知到新的wal发送给备库备库接受写盘再回放
是否发送wal日志与主库事务的提交与否没有关系但主库是否能提交取决于备库的wal日志写入位置默认是on的话需要落盘备库实时回放
注意点
流复制就是借助latch实现主从进程间的协作流复制场景下只读事务、子事务的提交以及事务回滚无需等待备库的ACK