MyBatis游标Cursor在Oracle数据库上的测试方式

 更新时间:2024年01月27日 09:41:17   作者:isea533  
这篇文章主要介绍了MyBatis游标Cursor在Oracle数据库上的测试方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

测试数据的列更多,内容更多,和 MyBatis游标Cursor的正确用法和百万数据传输的内存测试 不同,占用内存没有可比性。

1.1. 不配置内容,查询全部,99万数据

内存缓慢增长,12分钟都没有查询完。

1.2. 初始2G内存,最大4G内存,fetchSize=10000

当不设置fetchSize时,Oracle默认10,内存增长和1一样缓慢,查看源码发现Oracle默认为10:

为了更快的测试出结果,这里设置10000。

  • 查询过程耗时:54764ms
  • GC:20次
  • 占用内存:1582MB

2.1. Cursor查询,一条一条处理

默认的fetchSize=10,内容没有持续增加,但是执行时间仍然很长。

5分钟没有完成,直接终止运行。

2.2 Cursor查询,fetchSize=10000

  • 查询过程耗时:49340ms
  • GC:36次
  • 占用内存:164MB

2.3 Cursor查询,fetchSize=1000,内存限制20MB

  • 查询过程耗时:124113ms
  • GC:4563次
  • GC耗时:73337ms
  • 占用内存:19MB
  • 一半的时间在GC,吞吐量只有41%。

2.4 Cursor查询,fetchSize=100,内存限制20MB

  • 查询过程耗时:390714ms
  • GC:4631次
  • GC耗时:95130ms
  • 占用内存:18MB
  • GC耗时很长,吞吐量只有76%。

7分钟才执行完,

2.5 Cursor查询,fetchSize=10000,内存限制50MB

  • 查询过程耗时:42044ms
  • GC:158次
  • GC耗时:173ms
  • 占用内存:42MB

总结

除了上面的列出的几种情况下,还试过多种不同的配置,耗时没有比2.5更好。

除了MySQL中需要通过fetchSize = Integer.MIN_VALUE作为标记开启流式传输外,其他数据库都是正常的用法,通过控制 fetchSize 大小来减少内存占用和数据库交互次数。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java基础篇之反射机制示例详解

    Java基础篇之反射机制示例详解

    反射是Java可以提供的一个灵活又强大的功能,使用Java反射,您可以知道这个类在运行时具有什么属性和方法,也可以修改属性,调用方法,创建类的实例,这篇文章主要给大家介绍了关于Java基础篇之反射机制的相关资料,需要的朋友可以参考下
    2021-11-11
  • Java实战之OutOfMemoryError异常问题及解决方法

    Java实战之OutOfMemoryError异常问题及解决方法

    这篇文章主要介绍了Java实战之OutOfMemoryError异常,主要结合着深入理解Java虚拟机一书当中整理了本篇内容,感兴趣的朋友一起看看吧
    2022-04-04
  • Spring配置文件解析之BeanDefinitionReader详解

    Spring配置文件解析之BeanDefinitionReader详解

    这篇文章主要介绍了Spring配置文件解析之BeanDefinitionReader详解,ApplicationContext.xml配置文件解析成Document对象,真正对xml中元素解析的类是在BeanDefinitionDocumentReader的实现类中来完成的,需要的朋友可以参考下
    2024-02-02
  • SpringBoot整合MybatisPlus的简单教程实现(简单整合)

    SpringBoot整合MybatisPlus的简单教程实现(简单整合)

    这篇文章主要介绍了SpringBoot整合MybatisPlus的简单教程实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • SpringBoot Security使用MySQL实现验证与权限管理

    SpringBoot Security使用MySQL实现验证与权限管理

    安全管理是软件系统必不可少的的功能。根据经典的“墨菲定律”——凡是可能,总会发生。如果系统存在安全隐患,最终必然会出现问题,这篇文章主要介绍了SpringBoot安全管理Spring Security基本配置
    2022-11-11
  • Idea+maven搭建SSH(struts2+hibernate5+spring5)环境的方法步骤

    Idea+maven搭建SSH(struts2+hibernate5+spring5)环境的方法步骤

    这篇文章主要介绍了Idea+maven搭建SSH(struts2+hibernate5+spring5)环境的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Java中synchronized关键字修饰方法同步的用法详解

    Java中synchronized关键字修饰方法同步的用法详解

    synchronized可以用来同步静态和非静态方法,下面就具体来看一下Java中synchronized关键字修饰方法同步的用法详解:
    2016-06-06
  • Java利用jenkins做项目的自动化部署

    Java利用jenkins做项目的自动化部署

    这篇文章主要介绍了Java利用jenkins做项目的自动化部署,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 在Java中轻松使用工厂设计模式介绍

    在Java中轻松使用工厂设计模式介绍

    这篇文章主要介绍了在Java中轻松使用工厂设计模式介绍,工厂设计模式或工厂方法设计模式是一种广泛使用且易于理解的设计模式,文章通过围绕主题展开详细的内容介绍,感兴趣的朋友可以参考一下
    2022-09-09
  • Maven继承父工程时的relativePath标签解析用法小结

    Maven继承父工程时的relativePath标签解析用法小结

    relativePath 的作用是为了找到父级工程的pom.xml,本文主要介绍了Maven继承父工程时的relativePath标签解析用法小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03

最新评论