首批通过分布式安全可靠测评,为关键业务系统打造
应用侧 SQL 执行耗时远高于数据库内的问题
更新时间:2026-07-31 09:11
适用版本
OceanBase 数据库、ODP 所有版本。
问题现象
业务在测试环境执行时,从应用侧观测到 SQL 平均耗时 2ms,而在生产环境执行时耗时变成了 30~40ms,但数据库内的 SQL 耗时并没有增长。
问题原因
业务执行 SQL 采用 prepare+execute 的方式,使用 tcpdump 分别在 2883(ODP) 和 2881(OBServer)端口抓包对比,发现 ODP 把 prepare 发送到 OBServer 延迟了 30+ms。
ODP 延迟发送是因为 TCP 的 Delay ACK 行为,与生产环境 ODP 参数 socket_option_flag_out 的设置有关。本示例中 client_socket_option_flag_out 和 socket_option_flag_out 都设置为 3,即打开 KeepAlive 和 NoDelay,而生产环境这两个参数都设置为 2,即打开 KeepAlive 并使用 Delay 算法。
解决方法
修改 socket_option_flag_out 参数为 3,打开 NoDelay。