南大通用 GBase 8s JDBC 参数 OPTOFC简介

28 阅读3分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

OPTOFC 参数介绍

OPTOFC   是 "optimize-OPEN-FETCH-CLOSE" 的缩写,正如其名,该参数主要用于优化 JDBC 中的   PreparedStatement   执行   SELECT   语句时的性能。

具体来说,  OPTOFC   通过减少网络请求次数来提高性能,适用于以下场景:

  1.   当前   Statement   对象是   PreparedStatement   的实例。

  2.   执行的是   SELECT   语句。

  3.   ResultSet   的类型为   ResultSet.TYPE_FORWARD_ONLY  。

  4.   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技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。