信创改造中可观测平台如何迁移到国产数据库。实测 OceanBase(MySQL 模式)与达梦的适配要点、连接参数、SQL 方言差异与压测结论。
政企做信创改造时,应用和中间件往往先换,数据库最后换——因为它承载数据,风险最高。可观测平台本身也要跟着换:它每天写入海量日志和 span 元数据,对数据库的写入吞吐、批量插入、索引能力都是实打实的考验。数据库配置选错了,可观测平台自己就成了瓶颈——而这恰恰是你买它来排查的那个东西。
炬鲸 OBSERVE 存储层默认走 MySQL 协议,这让它在国产数据库上的适配成本大幅下降。下面记录我们在两个国产库上的实测经验。
OceanBase 的 MySQL 模式对协议兼容做得很好,我们把连接串从 MySQL 换成 OceanBase 后,平台代码零改动就跑起来了。唯一要注意的是连接参数:
db:
host: ob-proxy.example.com
port: 2883 # OceanBase 的 MySQL 协议端口
user: observe
database: observe_meta
params: "useServerPrepStmts=false"
关键在 useServerPrepStmts=false:OceanBase 早期版本对服务端预处理语句的支持和 MySQL 有差异,关掉后走文本协议,批量写入吞吐反而更稳。写入侧建议把日志和 span 分到不同的表空间,避免两张最重的表互相争抢。
达梦走的是 Oracle 风格,需要把存储层的 SQL 方言切到 DM 模式。实测下来有两处需要改:一是达梦的分页语法用 LIMIT 兼容层可以跑通,但大数据量下建议换成 ROWNUM 窗口写法,大表上的执行计划明显更好;二是自增主键要用达梦的 IDENTITY 列,不是 MySQL 的 AUTO_INCREMENT。
CREATE TABLE spans (
id BIGINT IDENTITY(1,1),
trace_id VARCHAR(64) NOT NULL
);
迁移工具我们用了达梦自带的 DTS,把 MySQL 的建表语句批量转换后,再人工核对一遍索引和默认值。默认值被静默丢掉是迁移后写入失败的经典原因,而且往往要等到有行真的插入时才会暴露。
在鲲鹏 920 服务器上,OceanBase(3 副本)单表写入稳定在 6 万行/秒,达梦在 3 万行/秒左右,都能扛住中等规模的可观测负载。给三条建议:写入走批量接口而不是逐行;查询列加索引;大表按月分表,方便旧分区归档。
一句实话:信创环境里数据库往往不是瓶颈,磁盘 IO 和网络才是。先把预算花在 SSD 和万兆网卡上,比追逐数据库调优实在得多。