sys_uuid()导致oracle的session缓慢增长

优化数据交换平台性能:替换oracle sys_uuid()方法
在负责的数据交换平台性能测试中,发现数据库连接缓慢增长与oracle的sys_uuid()方法有关。通过将该方法替换为java里的uuid生成方法,成功解决了问题并提升了性能。

最近负责的数据交换平台性能测试,发现数据库连接有缓慢增长的现象,通过调试发现是oracle的sys_uuid()方法导致的,感觉非常奇怪,只好先将sys_uuid()改成java里的uuid生成方法,详细说明如下:

 

软件环境:

java jdk1.4.2/Red Hat 3.4.6-2

oracle 9i/Red Hat 3.4.6-2

oracle驱动采用的是ojdbc14.jar

 

通过如下方法查询oracle 的 session 连接占用:

select count(1)
  from v$session v
 where v.USERNAME = 'EDIENTJOIN'
   and v.MACHINE = 'web'
   and v.OSUSER = 'mqm'

 

java程序的原来的调用方法是:

String insertSql = "INSERT INTO EDI_ALARM_RESPONSE(ALARM_RESPONSE_ID,ALARM_REQUEST_DETAIL_ID,ALARM_TYPE,QUANTITY,CREATE_TIME) VALUES "
    + "(SYS_GUID(),?,?,?,SYSDATE)";

 

后续改成:

String insertSql = "INSERT INTO EDI_ALARM_RESPONSE(ALARM_RESPONSE_ID,ALARM_REQUEST_DETAIL_ID,ALARM_TYPE,QUANTITY,CREATE_TIME) VALUES "
    + "(?,?,?,?,SYSDATE)";

 

第一个参数采用如下方式取值:

String uuid = UUIDKeyGenerator.getInstance().generateKey();//公司框架子封装的方法,貌似新版的jdk里提供类似的方法

 

 

==> Preparing: SELECT PRODUCT_ID,DEVICE_NAME FROM VIEW_A1_PRODUCT_ID WHERE PRODUCT_ID IN ( SELECT T .Product_Id from CERP_EPIDB_PRODUCT_ID T LEFT JOIN cerp_epidb_multi_chip_info i ON i.refer_uuid = T .uuid WHERE 1 = 1 AND T.status = 'Effective' AND T.del_flag = '0' and i.del_flag = '0' AND i.Product_Id in ( ? ) AND T .CREATED_BY_COMPANY=? ) <== Columns: NEXTVAL <== Row: 2413 ==> Parameters: 2003A(String), SX01(String) <== Total: 1 ==> Preparing: INSERT INTO SYS_LOGS ( ID, ADDRESS, REQUEST_BROWSER, EXCEPTION_DETAIL, LOG_TYPE, METHOD_NAME, METHOD_PARAMETERS, REQUEST_IP, USED_TIME, USER_NAME, CREATED_BY_WORKCODE, CREATED_TIME, CREATED_BY_COMPANY ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ==> Parameters: 2413(Long), 内网IP(String), Chrome 11(String), at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:235) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440) at com.sun.proxy.$Proxy94.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:177) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:96) at com.sun.proxy.$Proxy126.selectList(Unknown Source) ...(String), ERROR(String), com.smec.apps.rsampa.controller.api.RequestApiController.findProductInfo()(String), { code: 2003A prodType: Wafer}(String), 10.200.115.62(String), 0(Long), ME00545(String), ME00545(String), 2025-08-08 15:23:30.832(Timestamp), SX01(String) <== Total: 0 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5fc70c87] 2025-08-08 15:23:30.838 INFO 18528 --- [nio-8000-exec-8] c.o.group.apps.core.aop.ConsolePrintAop : 请求耗时 : 6 <== Updates: 1 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5259d63f] Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5259d63f] Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5259d63f] Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5259d63f] 2025-08-08 15:23:30.841 ERROR 18528 --- [nio-8000-exec-7] c.o.group.apps.core.aop.ConsolePrintAop : 抛出异常 : ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00904: "OMS_USEDQTY_FLAG": 标识符无效 ### The error may exist in com/smec/apps/rsampa/mapper/RsampaRequestMapper.java (best guess) ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: SELECT ID,UUID,MAIN_UUID,CASE_NO,STATUS,SALES,REQUEST_TYPE,PRODUCT_ID,TECHNOLOGY_ID,CUSTOMER_CODE,SITE,CUSTOMER_DEVICE_NAME,PRODUCT_CATEGORY,PLATFORM,USED_FOR,APPLY_QTY,FATHER_REQUEST,REMARK,FLOW_ID,SPECIAL_REQUEST_TYPE,CREATE_MEETING_TIME,PURPOSE,EFFECTIVE_QTY,CONSUME_TYPE,PLATFORM_TYPE,RELATE_PRODUCT_ID,FORM_JSON,TOTAL_EFFECTIVE_QTY,PRE_CONDITION,CREATE_TYPE,LAST_CREATE_TYPE,CTM_RSAMPA_AGREEMENT,MEETING_RESULT,SEND_MAIL_TIME,RESIGN_BY,TRANS_FLAG,OMS_RSAQTY_FLAG,OMS_USEDQTY_FLAG,PROD_OWNER,NEED_RE_PROCESS,NEED_MEETING,Quality_Control_Level,DEL_FLAG,CREATED_BY_OA_ID,UPDATED_BY_OA_ID,CREATED_BY_WORKCODE,UPDATED_BY_WORKCODE,CREATED_TIME,UPDATED_TIME,CREATED_BY_COMPANY,CREATED_BY_FAB,PROD_TYPE,HISTORY_RSA_USED_QTY FROM CERP_RSAMPA_REQUEST WHERE DEL_FLAG='0' AND (DEL_FLAG = ? AND PRODUCT_ID = ? AND STATUS <> ? AND STATUS <> ? AND STATUS <> ?) ### Cause: java.sql.SQLSyntaxErrorException: ORA-00904: "OMS_USEDQTY_FLAG": 标识符无效 错误原因
最新发布
08-09
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值