所有辅助服务器类型都使用日志来复制主服务器复制数据。主服务器将其整个逻辑日志发送至 HDR 和 RS 辅助服务器,但仅将日志页面的位置发送至 SD 辅助服务器。
索引页面日志记录可供所有辅助服务器使用,但对于到 RS 辅助服务器的复制而言是必需的。
数据库必须使用事务日志记录才能进行复制。
在您使用完全同步方式时,数据完整性最高,但是如果客户机应用程序使用无缓冲日志记录并且有许多小事务,那么系统性能可能会受到负面影响。
在使用异步方式时,系统性能最佳,但是如果发生服务器故障,那么数据可能丢失。
接近同步方式可提供比完全同步方式更优异的性能,比异步方式更优异的数据完整性。如果用于无缓冲日志记录,那么 SYNC 方式(在 DRINTERVAL 设置为 -1 时开启)与接近同步方式相同。
图: 从主服务器至 HDR 辅助服务器的数据复制方式
图: 管理数据复制的线程
主服务器的逻辑日志缓冲区的内容将复制到共享内存的数据复制缓冲区并清空到磁盘。如果主服务器使用的是完全同步或接近同步方式,那么它必须接收到来自 HDR 辅助服务器的确认,然后才能完成逻辑日志清空。 主服务器启动 drprsend 线程以将数据复制缓冲区通过网络传输到辅助服务器的 drsecrcv 线程,然后该线程会将数据写入共享内存的接收缓冲区。drsecapply 线程将接收缓冲区复制到恢复缓冲区。HDR 和 RS 辅助服务器都使用 logrecvr 线程来为逻辑日志记录应用其数据库空间。您可以通过更改 OFF_RECVRY_THREADS 配置参数的值来调整 logrecvr 线程的数量。
drprping 和 drsecping 线程发送并接收消息以监视两个服务器之间的连接。
因为主服务器和 RS 辅助服务器之间的检查点是异步的,因此 RS 辅助服务器需要索引页面日志记录。
图: 管理 RS 辅助服务器的数据复制的线程
如果主服务器可以验证其已连接到 RS 辅助服务器,那么 RSS_send 线程将页面从磁盘或逻辑日志缓冲区复制到数据复制缓冲区。RSS_Send 线程使用“服务器多路复用器组”(SMX) 连接以将数据复制缓冲区发送至 RS 辅助服务器的 RSS_recv 线程。然后,RSS_recv 线程将数据写入接收缓冲区。RSS_apply 线程将接收缓冲区复制到恢复缓冲区。
不同于 HDR 完全同步方式或接近同步方式,主服务器在发送下一个缓冲区之前不需要来自辅助服务器的确认。在 RSS_send 线程等待 RSS_Recv 线程接收来自 RS 辅助服务器的确认之前,主服务器最多发送 32 个未确认的数据复制缓冲区。
SD 辅助服务器从磁盘读取逻辑日志页,然后将数据应用于其内存数据缓冲区。