配置说明¶
SynchDB 在 postgresql.conf 中支持以下 GUC 变量。这些是适用于 SynchDB 管理的所有Debezium连接器的通用参数:
GUC 变量 | 类型 | 默认值 | 描述 |
---|---|---|---|
synchdb.naptime | integer | 100 | 从 Debezium runner 引擎轮询数据的时间间隔(毫秒) |
synchdb.dml_use_spi | boolean | false | 是否使用 SPI 处理 DML 操作 |
synchdb.synchdb_auto_launcher | boolean | true | 是否自动启动活跃的 SynchDB 连接器工作进程。此选项仅在 SynchDB 被包含在 shared_preload_library GUC 选项中时生效 |
synchdb.dbz_batch_size | integer | 2048 | Debezium 嵌入式引擎生成的 SynchDB 可处理的最大变更事件数。此批次变更由 SynchDB 在单个事务中处理 |
synchdb.dbz_queue_size | integer | 8192 | Debezium 嵌入式引擎的变更事件队列的最大大小(以变更事件数衡量)。应将其设置为 synchdb.dbz_batch_size 的至少两倍 |
synchdb.dbz_connect_timeout_ms | integer | 30000 | Debezium 嵌入式引擎与远程数据库建立初始连接的超时值(以毫秒为单位) |
synchdb.dbz_query_timeout_ms | integer | 600000 | Debezium 嵌入式引擎在远程数据库上执行查询的超时值(以毫秒为单位) |
synchdb.dbz_skipped_oeprations | string | “t” | Debezium 在处理更改事件时应跳过的操作的逗号分隔列表。 “c” 表示插入,“u” 表示更新,“d” 表示删除,“t” 表示截断 |
synchdb.jvm_max_heap_size | integer | 1024 | 启动连接器时分配给 Java 虚拟机 (JVM) 的最大heap内存大小(以 MB 为单位)。 |
synchdb.dbz_snapshot_thread_num | integer | 2 | Debezium 嵌入式连接器在初始快照期间应产生的线程数。请注意,根据 Debezium,多线程快照是一项“孵化功能” |
synchdb.dbz_snapshot_fetch_size | integer | 0 | Debezium 嵌入式连接器在初始快照期间应一次获取的行数。将其设置为 0 以让引擎自动选择 |
synchdb.dbz_snapshot_min_row_to_stream_results | integer | 0 | 在初始快照期间,Debezium 嵌入式引擎切换到流模式之前远程表应包含的最小行数。将其设置为 0 以始终切换到流模式 |
synchdb.dbz_incremental_snapshot_chunk_size | integer | 2048 | 在增量快照期间,Debezium 嵌入式引擎为 SynchDB 生成的更改事件的最大数量 |
synchdb.dbz_incremental_snapshot_watermarking_strategy | 字符串 | “insert-insert | Debezium 嵌入式引擎用于解决增量快照期间潜在冲突的水印策略。可能的值是“insert-insert”和“insert-delete” |
synchdb.dbz_offset_flush_interval_ms | integer | 60000 | Debezium 嵌入式引擎将偏移数据刷新到磁盘的间隔(以毫秒为单位) |
synchdb.dbz_capture_only_selected_table_ddl | boolean | true | Debezium 嵌入式引擎是否应在初始快照期间捕获所有表(false)或选定表(true)的模式 |
synchdb.max_connector_workers | integer | 30 | 最大的连接器后台进程数量 |
技术说明¶
- GUC(Grand Unified Configuration)是 PostgreSQL 中的全局配置参数
- 这些值需要在
postgresql.conf
文件中设置 - 修改配置后需要重启服务器才能生效
shared_preload_library
是一个关键的系统配置,决定了启动时加载哪些库
配置示例¶
# postgresql.conf 配置示例
synchdb.naptime = 1000 # 将等待时间增加到1秒
synchdb.dml_use_spi = true # 启用 SPI 处理 DML 操作
synchdb.synchdb_auto_launcher = true # 启用自动连接器启动synchdb.dbz_batch_size=4096 # 每个批次最多可以有 4096 个更改事件
synchdb.dbz_queue_size=8192 # Debezium 将使用 8192 个更改事件队列大小
synchdb.jvm_max_heap_size=2048 # 分配给连接器的 2GB 堆内存
synchdb.dbz_snapshot_fetch_size=0 # 让 Debezium 确定在初始快照期间要获取的最佳行数
synchdb.dbz_min_row_to_stream_results=0 # 始终在初始快照期间流式传输结果
synchdb.dbz_snapshot_thread_num=1 # Debezium 初始快照期间的单个线程
synchdb.dbz_incremental_snapshot_chunk_size=4096 # 增量快照以 4096 个批次生成更改事件max
synchdb.dbz_incremental_snapshot_watermarking_strategy='insert_insert' # 使用 insert_insert 水印策略
synchdb.dbz_offset_flush_interval_ms=60000 # 如果需要,每分钟将偏移数据刷新到磁盘
synchdb.dbz_capture_only_selected_table_ddl=false # Debezium 将仅捕获选定表的模式,而不是所有表
synchdb.max_connector_workers=false # 最多允许 10 个连接器
使用建议¶
-
synchdb.naptime
- 较低的值:更新频率更高,但系统负载更大
- 较高的值:系统负载较低,但更新频率降低
- 根据数据延迟要求进行调整
-
synchdb.dml_use_spi
- 需要特定 SPI 集成时启用
- 标准 DML 操作保持
false
-
synchdb.synchdb_auto_launcher
- 建议保持
true
以实现connecot自动启用管理 - 仅在需要手动控制连接器时改为
false
- 建议保持
-
synchdb.dbz_batch_size
- 值越低:JVM 内存使用量越低,处理变更事件的速度越慢
- 值越高:JVM 内存使用量越高,处理变更事件的速度越快
- 根据资源需求进行调整
-
synchdb.dbz_queue_size
- 值越低:用于保存变更事件的 Debezium 队列越小
- 值越高:用于保存变更事件的 Debezium 队列越大
- 需要设置为
synchdb.dbz_batch_size
的至少两倍
-
synchdb.jvm_max_heap_size
- 值越低:分配给 JVM 的堆内存越小
- 值越高:分配给 JVM 的堆内存越大
- 根据系统资源和工作负载需求进行调整
- 处理大量表时需求会增加
-
synchdb.dbz_snapshot_fetch_size
- 值越低:快照期间从表中获取的行越少
- 值越高:获取的行越多快照期间要从表中获取的行数
- 建议将其保留为 0,以便让 Debezium 找出最佳值
-
synchdb.dbz_min_row_to_stream_results
- 较低的值:JVM 内存需求较少,更改事件处理较慢
- 较高的值:JVM 内存需求较多,更改事件处理较快
- 建议将其保留为 0,以便让 Debezium 始终使用流模式以减少内存使用量
-
synchdb.dbz_snapshot_thread_num
- 较低的值:将数据导出到 SynchDB 进行处理的速度较慢
- 较高的值:将数据导出到 SyncDB 进行处理的速度较快
- 建议将其设置为相同的 CPU 核心数
-
synchdb.dbz_incremental_snapshot_chunk_size
- 较低的值:增量快照期间,在较低的 JVM 内存使用量下,更改事件处理较慢
- 较高的值:增量快照期间,在较高的 JVM 内存使用量下,更改事件处理较快
- 建议将其设置为与
synchdb.dbz_batch_size
相同,并根据资源需求进行调整
-
synchdb.dbz_offset_flush_interval_ms
- 较低的值:更频繁地更新偏移文件,更多的 IO,故障恢复后重新处理的旧批次较少
- 较高的值:更不频繁地更新偏移文件,更少的 IO,故障恢复后重新处理的旧批次较多
- 建议将其设置为 60000,这是 Debezium 的建议
-
synchdb.max_connector_workers
- 较低的值:一次可以运行的连接器工作器越少,共享内存需求越少
- 较高的值:一次可以运行的连接器工作器越多,共享内存需求越多
性能考虑¶
- 根据系统负载和延迟要求调整
synchdb.naptime
- 调高
synchdb.dbz_batch_size
和synchdb.dbz_queue_size
以增加处理吞吐量 - 根据工作负载调整
synchdb.jvm_max_heap_size
- 表数量较少(10k 或更少)+ 每个表的数据量适中或较大:512MB ~ 1024MB 就足够了
- 表数量较多(100k 或更多)+ 每个表的数据量适中:考虑增加到 2048MB 或以上
- 将
synchdb.dbz_snapshot_fetch_size
设置为 0,让 Debezium 选择最佳提取值 - 将
synchdb.dbz_snapshot_thread_num
设置为与 CPU 核心数匹配 - 将
synchdb.dbz_min_row_to_stream_results
设置为 0,以始终使用流模式来减少内存使用量
常见使用场景¶
高吞吐量系统¶
synchdb.naptime = 100 # 更快的轮询以实现实时更新
synchdb.dml_use_spi = false # 标准 DML 以获得更好的性能
synchdb.dbz_batch_size = 4096
synchdb.dbz_queue_size = 8192
synchdb.jvm_max_heap_size = 2048
synchdb.dbz_snapshot_thread_num = 4
synchdb.dbz_snapshot_fetch_size = 0
synchdb.dbz_min_row_to_stream_results = 0
资源受限系统¶
synchdb.naptime = 1000 # 降低轮询频率
synchdb.dml_use_spi = false # 最小化额外开销
synchdb.dbz_batch_size = 1024
synchdb.dbz_queue_size = 2048
synchdb.jvm_max_heap_size = 512
synchdb.dbz_snapshot_thread_num = 1
synchdb.dbz_snapshot_fetch_size = 0
synchdb.dbz_min_row_to_stream_results = 0
开发/测试环境¶
synchdb.naptime = 500 # 默认轮询间隔
synchdb.dml_use_spi = true # 启用高级功能进行测试
synchdb.dbz_batch_size = 2048
synchdb.dbz_queue_size = 4096
synchdb.jvm_max_heap_size = 1024
synchdb.dbz_snapshot_thread_num = 2
synchdb.dbz_snapshot_fetch_size = 0
synchdb.dbz_min_row_to_stream_results = 0
故障排除¶
-
CPU 使用率高
- 增加
synchdb.naptime
值 - 检查 DML 操作模式
- 减少
synchdb.dbz_batch_size
和synchdb.dbz_queue_size
- 增加
synchdb.dbz_snapshot_thread_num
- 增加
-
数据延迟问题
- 减少
synchdb.naptime
值 - 增加
synchdb.dbz_batch_size
和synchdb.dbz_queue_size
- 检查网络连接
- 增加
shared_buffers
- 将工作负载拆分到多个连接器,而不仅仅是一个
- 使用
no_data
模式启动连接器以仅获取模式并开始 CDC,而不是initial
模式(在 CDC 开始之前捕获模式和初始数据)。
- 减少
-
启动问题
- 验证
shared_preload_library
配置 - 检查
synchdb_get_state()
的错误消息 - 检查连接器工作状态
- 验证
-
内存不足问题
- 增加
synchdb.jvm_max_heap_size
- 增加
shared_buffers
- 增加
最佳实践¶
-
初始设置
- 从默认值开始
- 监控系统性能
- 根据需求逐步调整
-
生产环境
- 记录所有配置更改
- 在测试环境中先测试更改
- 保持正常工作配置的备份
-
监控
- 跟踪系统资源使用情况
- 监控数据同步延迟
- 记录配置更改
补充说明¶
-
性能优化
- 在高负载情况下适当增加
naptime
- 需要实时性时可以降低
naptime
,但要注意系统负载 - 建议根据实际业务场景进行压力测试
- 在高负载情况下适当增加
-
安全考虑
- 定期检查配置文件权限
- 记录配置更改日志
- 保持配置文件的备份
-
维护建议
- 定期检查系统日志
- 监控连接器状态
- 制定配置变更流程