真香!EasyExcel实现Excel百万级数据导出测验,高效低内存占用。 (记一次线上问题分析)
一、线上问题
线上问题分析。前几天,某系统在尝试导出百万条明细时,导出时造成系统假死,内存溢出,随后系统崩溃。重启之后再次尝试导出同样的明细,结果依旧是系统崩溃。虽然没有拿到具体日志,但根据早前真香!EasyExcel实现Excel百万级数据导入,高效低内存占用 对百万数据导入的验证结果,进行了初步的分析,可能存在以下两个导致问题的原因:
原因一: Excel的导出过程中,系统使用了Apache POI,大量数据导出导致堆内存占用极大,甚至超过原本应有的百倍。这就容易发生堆内存不足的问题,从而使得系统假死。而在多次full gc仍无法释放足够内存后,系统最终崩溃。
原因二: 此外,系统在导出Excel过程中使用Easy Excel,却出现分页查询语句性能问题。对于普通分页查询,由于深度分页时越往后翻页速度越慢,因此可能拖累整个数据库,最终导致应用崩溃。但值得注意的是,Easy Excel在导入导出数据过程中,是基于硬盘逐行读写的模式,这意味着不存在内存占用问题,并通过上次的实验已得到了验证大量数据导入。
二、 本章目标
本次重点验证一下Easy Excle导出大量数据时的内存占用情况以及避免深分页的一种实现方案。
三、实验数据准备
实际数据: 单表,255999条数据,每行数据包含 94列,初始数据统计结果截图如下:

四、代码实现
关键代码截图如下:

文章讲述了线上系统在尝试通过EasyExcel导出百万级数据时遇到的内存溢出问题,通过对不同每页大小的测试,发现EasyExcel在大数据导出时内存占用小且性能稳定。然而,系统崩溃可能与使用ApachePOI的性能问题及并发导出有关,强调了控制并发和优化查询策略的重要性。
&spm=1001.2101.3001.5002&articleId=135755458&d=1&t=3&u=e06f1a8ec0f74e5fac7dc9b879a829ed)
1万+

被折叠的 条评论
为什么被折叠?



