使用 OPTOFC 参数优化 GBase 8s JDBC
发布: (2026年5月3日 GMT+8 22:15)
3 分钟阅读
原文: Dev.to
Source: Dev.to
当 OPTOFC 生效时
仅在满足 以下全部 条件时才会应用此优化:
- 语句是
PreparedStatement实例。 - 查询是
SELECT。 ResultSet类型为TYPE_FORWARD_ONLY。- 并发模式为
CONCUR_READ_ONLY。
它的作用
- 合并 OPEN 与 FETCH 消息 – 通常这两个是分开的网络请求。使用
OPTOFC后,它们会一起发送,省去一次往返。(对于可变长度列,驱动可能已经自行合并;设置OPTOFC=1强制合并。) - 自动关闭游标 – 当所有行都已从服务器取回,服务器会自动关闭游标。随后调用
ResultSet.close()就不会产生额外的网络请求。
如何启用
在 JDBC URL 中加入 OPTOFC=1:
jdbc:gbasedbt-sqli://192.168.226.180:12888/testdb:OPTOFC=1
性能基准
测试在循环中执行同一条 SELECT * 查询 1,000 次。使用了两张表:
t1(name varchar(10))– 可变长度列t2(name char(10))– 固定长度列
示例 1 — 固定长度列 (char)
| 配置 | 时间 |
|---|---|
不使用 OPTOFC | 2,822 ms |
使用 OPTOFC=1 | 1,697 ms — ≈ 40 % 更快 |
示例 2 — 可变长度列 (varchar)
| 配置 | 时间 |
|---|---|
不使用 OPTOFC | 2,276 ms(基准更低,因为默认对 varchar 已合并 OPEN/FETCH) |
使用 OPTOFC=1 | 1,679 ms — 仍然约 26 % 更快 |
示例 3 — 当它 不起作用 时 (TYPE_SCROLL_INSENSITIVE)
URL 中已包含 OPTOFC=1,但 ResultSet 类型被设为 TYPE_SCROLL_INSENSITIVE,导致第 3 条条件失效。执行时间仍为 2,848 ms,与未优化路径相同。
关键要点
OPTOFC=1 为前向、只读的 SELECT 查询(尤其是涉及可变长度列时)提供了可观的加速。只需修改 URL,无需更改代码,即可为多数 GBase 8s 应用带来低成本的性能提升。
如果你在 JDBC 工作负载中使用 GBase 8s,请检查你的 ResultSet 类型和连接字符串——你可能正在浪费本可以获得的性能。