原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
OPTOFC 参数介绍
OPTOFC 是 "optimize-OPEN-FETCH-CLOSE" 的缩写,正如其名,该参数主要用于优化 JDBC 中的 PreparedStatement 执行 SELECT 语句时的性能。
具体来说, OPTOFC 通过减少网络请求次数来提高性能,适用于以下场景:
-
当前 Statement 对象是 PreparedStatement 的实例。
-
执行的是 SELECT 语句。
-
ResultSet 的类型为 ResultSet.TYPE_FORWARD_ONLY 。
-
ResultSet 的并发类型为 ResultSet.CONCUR_READ_ONLY 。
作用
1. 减少网络请求: 在未使用 OPTOFC 时, OPEN 和 FETCH 消息会分别发送,导致两次网络往返。使用 OPTOFC 后,这两个消息会在同一次网络请求中一起发送,从而减少一次网络往返。
2. 自动关闭游标: 如果一次性将所有行从数据库中取出,服务器会自动关闭游标。在 ResultSet.close() 时,可以减少一次网络请求。
开启方法
通过在 JDBC URL 中添加 OPTOFC=1 来开启 OPTOFC 优化:
jdbc:gbasedbt-sqli://:/:OPTOFC=1
作用1、“OPEN”和“FETCH”消息会在同一次网络请求中一起发送,如果不使用OPTOFC,就有2次往返(如果没有变长列,也只有1次网络往返)
作用2、如果一次把所有行从库里FETCH出来,那么server会自动关闭游标,ResultSet.close()时,可以减少一次网络请求
示例1.无变长列
数据准备:
create database testdb with log;
create table t1(name varchar(10));
insert into t1 values('GBase8s');
(1)URL未添加加OPTOFC
@Test
public void test1() throws SQLException {
String url = "jdbc:gbasedbt-sqli://192.168.226.180:12888/testdb";
try (Connection conn = DriverManager.getConnection(url, "gbasedbt", "111111")) {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
try (PreparedStatement ps = conn.prepareStatement("SELECT * FROM t1");
ResultSet rs = ps.executeQuery()) {
rs.next();
}
}
System.out.println("time:" + (System.currentTimeMillis() - startTime));
}
}
输出:
time:2822
URL添加OPTOFC=1
@Test
public void test1() throws SQLException {
String url = "jdbc:gbasedbt-sqli://192.168.226.180:12888/testdb:OPTOFC=1";
try (Connection conn = DriverManager.getConnection(url, "gbasedbt", "111111")) {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
try (PreparedStatement ps = conn.prepareStatement("SELECT * FROM t1");
ResultSet rs = ps.executeQuery()) {
rs.next();
}
}
System.out.println("time:" + (System.currentTimeMillis() - startTime));
}
}
输出:
time:1697
示例2 . 有变长列
数据准备:
create table t2(name char(10));
insert into t2 values('Gbase8s');
(1)URL没加OPTOFC
输出:
time:2276
有变长列时,即使没加OPTOFC=1,OPEN和FETCH也是一起发送的,所以time短
(2)URL添加OPTOFC=1
输出:
time:1679
示例3. 不满足 ResultSet.TYPE_FORWARD_ONLY
@Test
public void test1() throws SQLException {
String url = "jdbc:gbasedbt-sqli://192.168.226.180:12888/testdb:OPTOFC=1";
try (Connection conn = DriverManager.getConnection(url, "gbasedbt", "111111")) {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
try (PreparedStatement ps = conn.prepareStatement("SELECT * FROM t1", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = ps.executeQuery()) {
rs.next();
}
}
System.out.println("time:" + (System.currentTimeMillis() - startTime));
}
}
输出:
time:2848
结论:不满足条件时,OPTOFC=1 无效。
通过本文的介绍,希望你已经了解了 GBase 8s JDBC 参数 OPTOFC 的作用、使用方法以及通过实际示例验证其优化效果。 OPTOFC 参数通过减少网络请求次数,显著提高了 PreparedStatement 执行 SELECT 语句时的性能。希望这些内容能帮助你在实际开发中更好地优化数据库操作。如果你在使用过程中遇到任何问题,欢迎随时在社区中提问,我们在这里为你提供支持!
原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。