为了在 Datastream 中保持可靠的复制并最大限度地减少停机时间,您可以在数据流和源数据库中应用运营最佳实践。这些实践可帮助您切换数据流的源数据库、配置指标提醒、排查延迟问题,以及规划每个数据流的表限制。
更改数据流的源数据库
在某些情况下,您可能需要更改数据流的源数据库。例如,您可能需要修改数据流,使其从副本而非主数据库实例进行复制。
- 创建连接配置文件 为副本实例。
- 使用您为副本创建的连接 配置文件和目标位置的现有连接配置文件 创建数据流。
- 启动数据流,并停用 历史数据回填。启动数据流后,它将仅提取二进制日志中的数据。
- 可选。在数据流运行后,对其进行修改 以启用自动回填。
- 暂停数据流,该数据流正在 从主实例读取。
- 可选。删除数据流,该数据流正在从主实例 流式传输数据。
- 可选。删除连接配置文件 删除主实例的连接配置文件。
在 Datastream 中设置提醒和监控
Datastream 信息中心包含大量信息。这些信息有助于进行调试。您可以在 Cloud Logging 中提供的日志中找到更多信息。
Datastream 提醒
Datastream 没有设置默认提醒。例如,您可以点击概览 标签页中的 “创建提醒政策” 链接,为数据新鲜度 指标创建提醒政策。对于其余指标,请按照以下步骤操作:
在 Google Cloud 控制台中,前往 notifications 提醒 页面:
点击创建政策 。
点击选择指标 下拉列表。
在过滤条件字段中,输入
Datastream。可选:您可能需要停用有效 过滤条件,才能查看所有可用指标。
在 Datastream 数据流 下搜索您要监控的指标。
点击应用 。
可选:在添加过滤条件 和转换数据 部分中输入所需详细信息。点击下一步 。
在配置提醒触发器 部分中输入所需信息。点击下一步 。
在配置通知并最终确定提醒 部分中配置通知。
查看提醒,并在准备就绪后点击创建政策 。
如需详细了解如何完成每个步骤,请参阅 创建提醒政策。
我们建议您为以下 Datastream 指标创建提醒:
- 数据新鲜度
- 数据流不支持的事件数
- 数据流总延迟时间
针对其中任何指标的提醒都可能表明数据流或源数据库存在问题。
了解延迟时间
Datastream 提供以下指标,帮助您了解复制延迟时间:
- 数据新鲜度:数据提交 到源的时间与 Datastream 读取数据的时间之间的差值。如果此指标较高,则表示 Datastream 读取数据的速度低于源生成数据的速度。这表示源或与源的网络连接可能存在问题。
- 系统延迟时间:Datastream 处理 事件所需的时间,从从源读取事件到将事件写入 目标位置。
- 总延迟时间:端到端复制延迟时间,表示从 数据提交到源到将数据写入目标位置的总时间。
如果数据新鲜度较高,常见原因包括:
- 源过载 :源数据库生成日志(二进制日志文件、重做日志文件、WAL 文件)的速度快于 Datastream 读取日志的速度。
- 针对 MySQL/Oracle 的操作
增加
maxConcurrentCdcTasks参数 以并行读取更多日志。 - 针对 PostgreSQL 的操作 :将高变化率表隔离到其自己的专用数据流中。
- 针对 SQL Server 的操作 :增加
maxConcurrentCdcTasks参数,以并行读取更多更改表。
- 针对 MySQL/Oracle 的操作
增加
- 源资源不足 :源数据库服务器本身遇到问题,例如 CPU 使用率过高、内存不足或磁盘 I/O 瓶颈。
- 操作 :确保源实例运行状况良好。检查 CPU/RAM 使用率。对于 PostgreSQL,请考虑增加
logical_decoding_work_mem参数的值;对于 Oracle,请确保分配足够的系统全局区 (SGA)。
- 操作 :确保源实例运行状况良好。检查 CPU/RAM 使用率。对于 PostgreSQL,请考虑增加
- 网络容量问题:源与
之间的 ping 时间过长或带宽饱和。 Google Cloud
- 操作 :监控您的 VPN 或 Cloud Interconnect 带宽和延迟时间。
- 单个大型事务 :大型批量作业(例如对数百万行执行
UPDATE)可能会导致延迟时间暂时飙升。- 操作 :这是预期行为。等待 Datastream 处理大型事件。请考虑在未来将大型批量作业拆分为较小的块。
如果系统延迟时间较长,则可能表示 Datastream 或目标位置存在问题。
- 操作 :检查 Cloud Logging 中是否存在持久性行级错误(例如
invalid input for type json。如果数据流因数据类型或约束错误而处于重试循环中,则可能需要在源中手动更正数据。如果没有明显的错误,请与 Google 支持团队联系以获取帮助。
单个数据流可以处理多少个表?
我们建议单个数据流最多包含 10,000 个表。表的大小没有限制。如果您需要创建包含更多表的数据流,则该数据流可能会进入错误状态。为避免这种情况,请考虑将源拆分为多个数据流。