oracle网络服务之beq协议和SDU优化(性能提升可达30%)
12.3.1 BEQ协议
如果Oracle数据库服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接采用进程间直接通信,不需要走网络监听,对于大数据量的导入导出来说性能更高。BEQ协议可以通过在tnsnames.ora 配置文件的TNS连接串中将协议声明为BEQ来指定,如下所示:
orclbeq =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = BEQ)
(PROGRAM = /u01/app/oracle/product/12.2/db_home1/bin/oracle)
(ARGV0 = orclpdb)
(ARGS = '(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))')
# (ENVS = 'ORACLE_HOME=/u01/app/oracle/product/12.2/db_home1,ORACLE_SID=ora12c')
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclpdb)
)
)
下面我们来看一下采用BEQ和网络协议的性能差别。
使用TCP/IP协议:
[oracle@oel-12c oradata]$ expdp hr/hr@localhost:1521/orclpdb tables=\(big_table_tmp\) directory=dmp_dir dumpfile=expdat_nocond2.dmp exclude=statistics
连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
启动 "HR"."SYS_EXPORT_TABLE_01": hr/********@localhost:1521/orclpdb tables=(big_table_tmp) directory=dmp_dir dumpfile=expdat_nocond2.dmp exclude=statistics
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/INDEX/INDEX
. . 导出了 "HR"."BIG_TABLE_TMP" 290.8 MB 1000000 行
已成功加载/卸载了主表 "HR"."SYS_EXPORT_TABLE_01"
******************************************************************************
HR.SYS_EXPORT_TABLE_01 的转储文件集为:
/oradata/ORA11G/dmpdir/expdat_nocond2.dmp
作业 "HR"."SYS_EXPORT_TABLE_01" 已于 星期日 3月 17 15:32:30 2019 elapsed 0 00:00:30 成功完成
使用BEQ协议:
[oracle@oel-12c oradata]$ expdp hr/hr@orclbeq tables=\(big_table_tmp\) directory=dmp_dir dumpfile=expdat_nocond1.dmp exclude=statistics
连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
启动 "HR"."SYS_EXPORT_TABLE_01": hr/********@orclbeq tables=(big_table_tmp) directory=dmp_dir dumpfile=expdat_nocond1.dmp exclude=statistics
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/INDEX/INDEX
. . 导出了 "HR"."BIG_TABLE_TMP" 290.8 MB 1000000 行
已成功加载/卸载了主表 "HR"."SYS_EXPORT_TABLE_01"
******************************************************************************
HR.SYS_EXPORT_TABLE_01 的转储文件集为:
/oradata/ORA11G/dmpdir/expdat_nocond1.dmp
作业 "HR"."SYS_EXPORT_TABLE_01" 已于 星期日 3月 17 15:33:36 2019 elapsed 0 00:00:16 成功完成
从上可知,使用TCP/IP协议进行导出的时间比BEQ协议多了近1倍。
除了在Oracle自带的工具中可以使用BEQ协议外,JDBC OCI驱动也能够使用BEQ协议进行连接,如下所示:
System.setProperty("oracle.net.tns_admin","$ORACLE_HOME\network\admin");
String dbURL = "jdbc:oracle:oci:@orclbeq";
Connection connection = DriverManager.getConnection(dbURL, "hr", "hr");
相比TCP/IP协议,在JDBC中使用BEQ协议导出时速度也更快。