首页 > 数据库 >关于在oracle查询密集的情况下OOM问题

关于在oracle查询密集的情况下OOM问题

时间:2023-08-28 14:13:39浏览次数:45  
标签:statements OOM 查询 rowSize SQL oracle defineChars col

线上tomcat运行内存设置为4G,在用户使用密集的情况下oom。

通过内存分析工具(MAT)得到结果如下:

 

应当是SQL查询结果过大导致,但是SQL查询返回结果并不大。

实际查询结果非常小,只有一条数据,但是SQL较为复杂,关联的表较多。

使用的是oracle提供的jdbc驱动包,在查询的时候会使用defineChars预设大小

defineChars大小的计算公式是这样的:

defineChars大小 = rowSize * rowPrefetchCount

rowPrefetchCount在Oracle中,缺省值为10。

 

 

 

其中rowSize是执行查询设计的每一列的大小的和。计算公式是:

rowSize = col_1_size + col_2_size + ... + col_n_sizes

所以在查询varchar2(4000)之类的设置的列较多的情况下,可能导致defineChars可能就有1MB了。

这个和预想的300MB差距较大,还有一个preparedStatement 在不断地复用(就是做了缓存),在dbcp中为-1,那么就是不做限制。

所以在缓存的情况下,对象一直被引用,导致JVM无法完成GC,最终导致OOM。

解决方法就是设置相关的配置,例如

spring.datasource.max-open-prepared-statements指定最大的打开的prepared statements数量.
spring.datasource.pool-prepared-statements指定是否池化statements.

 

等。

标签:statements,OOM,查询,rowSize,SQL,oracle,defineChars,col
From: https://www.cnblogs.com/zhengyuanyuan/p/17662128.html

相关文章

  • Oracle10常见服务总结
    (1)OracleService数据库服务,这个服务会自动地启动和停止数据库。如果安装了一个数据库,它的缺省启动类型为自动。服务进程为ORACLE.EXE,参数文件initSID.ora,日志文件SIDALRT.log,控制台SVRMGRL.EXE、SQLPLUS.EXE。 (2)OracleTNSListener监听器服务,服务只有在数据库需要远程访问时才需要(无......
  • 管理好ORACLE数据表的几个建议
    ORACLE数据库中,表是最基本的内容。可以说,表设计的好坏直接跟数据库的性能相关。所以,在设计表的时候,除了要遵循其固有的数据库准则之外,还需要看个人的数据库管理经验。下面我就把这些经验分享一下,或许对大家有所帮助。 一、表该存放在哪里? 我们都知道,在ORACLE数据......
  • 介绍一下Oracle的操作符优化
    IN:IN写出来的SQL比较容易写及清晰易懂但是性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:ORACLE试图将IN转换成多个表的连接,如果转换不成功会先执行IN里面的子查询,再查询外层的表记录,如果转换成功,则直接采用多个表的连接方式查询。所以用IN的SQL至......
  • ☀️Navicat连接Oracle:'ORA-12638: Credential retrieval failed' 解决办法
    前言:我们在使用Navicat连接Oracle数据库的时候,需要oci.dll动态链接库,Navicat16在安装时候已经自带了。我在之前使用一直好好的,就今天需要连一个新项目的Oracle,报错了:ORA-12638:Credentialretrievalfailed',如下:解决:通过同事口中得知,要连接的Oracle版本是:12c(12.2.0.1.0),而......
  • Oracle表空间与表空间文件
    表空间在Oracle中,表空间(Tablespace)是一个逻辑的概念,用来组织和存储数据库中的物理数据。而表空间文件(TablespaceFile)是实际存储数据的物理文件。一个表空间可以包含一个或多个表空间文件,表空间文件通常保存在操作系统的文件系统中。当创建数据库时,管理员可以指定表空间的名称和......
  • Oracle数据库表空间和角色/用户 权限
    问题1.https://blog.csdn.net/weixin_42446705/article/details/1163377112.https://blog.csdn.net/wanghai__/article/details/47918793.https://www.iteye.com/blog/czmmiao-1304934这个特别好4.https://www.cnblogs.com/abeam/p/13439120.html5.https://blog.csdn.net/l......
  • oracle数据库中插入特殊符号'&'
    在plsql里边执行:updateuserinfosetpageurl='myjsp?page=1&pagesize=10'whereid='test'这条sql语句往数据库的pageurl字段放进去了一个url地址,但是执行的时候却并非那么理想,因为这其中有一个oracle的特殊字符,需要进行转义,那就是字符'&'.怎么处理上例中的特殊字符?两个办法:  ......
  • 理解ORACLE数据库字符集
    一.引言   ORACLE数据库字符集,即Oracle全球化支持(GlobalizationSupport),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,诸如日期格式、数字格式和存储序列等。Oracle可以支持多种语言及字符集,......
  • 原来可以用代码这样查询IP归属地
    哈喽,大家好,我是指北君。最近各大社交媒体平台都发布了显示用户IP归属地的功能,有同学可能还不知道如何查询自己的IP归属地,其实很简单,你只需要打开Web浏览器,用百度搜索“IP归属地”就能显示自己的当前归属信息。以上是使用网页的方式,有没有使用代码获取的方式?如果自己的公司也要求加......
  • Adobe Lightroom Classic 2023内置激活版
    AdobeLightroomClassic2023内置激活版是Adobe公司开发的一款图片后期处理软件,也是史上首个专为专业摄影师和摄影爱好者提供了全套照片服务的应用程序,很适合摄影师拍摄照片的后期制作,面向数码摄影、图形设计等专业人士和高端用户,支持各种RAW图像,主要用于数码相片的浏览、编辑、整......