服务器-web项目在执行大量的插入语句时执行一段时间后卡死

问题描述

web项目在执行大量的插入语句时执行一段时间后卡死

SSH框架,在页面有一个poi 批量导入excel的功能,每读取excel一行,保存为一个实体然后循环insert到DB里。刚开始程序运行正常,但是一段时间过后,系统出现卡死,不再执行insert sql ,刷新页面也没有响应,只能重启服务器。期间程序没有报错,myeclipse也不是内存溢出导致的卡死,因为点击其他功能模块时不会出现上述所说的问题,只有在执行大量的insert sql 时才会。
因为代码没有报错我也就不贴代码了。
我自己想的不知道是不是hibernate在做insert时由于数据量大导致链接关闭,但是我设置数据库连接池断开时间是1800s,事实上也没有超过。由于不知道hibernate底层的源码是怎样执行insert的,希望有大神说说,为什么在执行少量的insert时系统不会卡死,但处理大量数据并长时间insert的就是卡死。
虚心求各位指导!谢谢大家。如果有需要我会贴出代码。感谢。

更改过后的代码,但是又有新的问题

 @Override
    public void save(List<T> list) {
        long begin = System.currentTimeMillis();
        Session session = getSession();
        try {
            for (int i = 0; i < list.size(); i++) {
                session.save(list.get(i));
                if (i%50 == 0 && i != 0) {
                    session.flush();
                    session.clear();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            session.clear();
        }
        long end = System.currentTimeMillis();
        System.out.println((end-begin)/1000.0);
    }

这是basedao,是spring管理hibernate,加了2个属性

 <prop key="hibernate.jdbc.fetch_size">100</prop>
<prop key="hibernate.jdbc.batch_size">50</prop>

方法是根据不同的实体批量insert,虽然现在执行大量insert时不会中断,但是我有4个实体要连续执行批量insert,在insert完前2个实体后,我在第三个实体调用批量导入的方法设了断点,程序并没有停在断点上,又出现了卡死的情况。PS:不知道是不是在insert第二个实体那里就卡死了,还是说执行完第二个批量insert就卡死了,反正我在第三个批量insert方法前断点没进,并且系统卡死,只能重启。

请大家不吝赐教!感谢!

解决方案

就这种批量插入,就不要用hibernate了,直接jdbc调用sql的bulk copy插入。估计是你的事务造成死锁。

解决方案二:

http://www.360doc.com/content/14/0419/01/7669533_370197299.shtml

解决方案三:

你的大量插入代码是怎么样的呢?可以从POI读取一批数据后统一用sql的批量插入,避免不必要的数据库连接。

解决方案四:

http://blog.csdn.net/xiazdong/article/details/7709068

解决方案五:

这应该是没有定时清空缓冲区导致的吧

解决方案六:

不要每读一条都执行一次insert,这种性能很差,效率很差。
可以这样,你在代码里循环读取了1000条数据后,统一将这1000条数据批量插入到数据库中,然后再继续循环读取1000条再去调用批量插入方法,直到数据读取完。
不管怎么说批处理要比单条执行操作要好多了。至少这样的1000条数据就节省了999次的insert。

解决方案七:

处理大量数据并长时间insert看看你是一条条插入的,还是批量插入的,这个在数据多时性能影响是很大的

时间: 2024-12-02 08:16:08

服务器-web项目在执行大量的插入语句时执行一段时间后卡死的相关文章

tomcat 部署一段时间后 不执行

问题描述 tomcat 部署一段时间后 不执行 tomcat 部署后,一段时间内没有访问的情况下,tomcat好像死掉一样,再次访问时访问不了,tomcat控制台没有日志打印. 如果加定时器,每分钟执行一次,就不会出现这样的问题,这是为什么?需要怎么配置? 解决方案 确定安装正确,参考我博文,Ubuntu工具安装类别里面.如果安装正确的话,重新启动,关机 解决方案二: 不应该出现这个问题啊 你的项目是什么项目啊 解决方案三: 右键点击那个tomcat服务器修改一下配置,具体百度上有详细教程 解决

我的Asp.net C# Web程序,用了一段时间后他CPU自动疯涨

问题描述 我的Asp.netC#Web程序,用了一段时间后出现问题了.服务器我们是Window2003SP2数据库是MSSQL2005,.net2.0框架.情况是这样的,我们是用动网的代码生成器做的数据层.项目开发进入测试阶段后,我们发现系统在被3个以上用户使用后,系统进程中W3wp.exe开始疯涨,一度涨到100%,同时内存也跟着涨.这个项目我们做了对立的应用程序进程池,稍微缓解了一下,但是我们认为是程序问题,但是始终测试不出来.程序于数据库连接正常.每次使用大改10分钟左右,就会死掉.程序提

应用服务器-Server2012 DaraCenter版,使用过一段时间后到数据库服务器端口就不通。

问题描述 Server2012 DaraCenter版,使用过一段时间后到数据库服务器端口就不通. WEB服务器是Server2012 DaraCenter版,数据库服务器操作系统是08R2版,数据库是SQL2012,其中数据库服务器有做过故障转移群集.在使用过程中发现一个问题,原本好好的网站都能访问,但使用一段时间后,就发现web连不上数据库,telnet试一下发现web服务器到数据库端口不通,试过把web服务器和数据库服务器的防火墙都关闭掉了,也不行,在运行过程中同样也会发生这样的问题,就很

c#-C# Winfrom项目,运行程序一段时间后提示“内在不足”的报错信息。

问题描述 C# Winfrom项目,运行程序一段时间后提示"内在不足"的报错信息. 在C# Winfrom项目,有一个form窗体,六个Panel控件(用于放置显示监控视频图像的用户自定义控件), 还有一个timer计时器控件(设置每隔2分钟调用其它六个监控视频图像放到对应的Panel控件) 目前遇到的问题是,监控点的视频图像有的由于网络好点显示加载视频图像快点,有的由于网络不是太好加载显示视频图像慢点. 在form窗体运行一段时间后,导致这个form窗体的六个Panel控件在轮流显示

判断是否符合规划-如何监控,在插入数据时,表字段符合所对应的规范

问题描述 如何监控,在插入数据时,表字段符合所对应的规范 今天接到的一个任务: 接入数据的同时增加重点监控字段, A表字段(主键,对应表,对应字段,对应规则),A( AID,TableName,TableZd,Bid), B表字段(主键,规则编码,规则名),B(Bid,Gzbm,Gzm); A表( 1, "USER" , "PWD" , 1); B表( 1 , "^w+(.w+)*+@w+(.w+)+$" , "email格式"

jquery each-jQuery each循环中隔一段时间后,再执行下一个循环

问题描述 jQuery each循环中隔一段时间后,再执行下一个循环 初步涉及脚本,请各位大神给予帮忙. 脚本如下,在执行ajax异步调用后,会到后台执行相关方法,需要时间等待.所以需要延长时间后再进入第二次循环.请问怎么实现?是用setTimeOut吗?又怎么实现? $('#btnExecute').click(function(){ $('#tbFileList').find(":checkbox:checked").each(function(){ var filename= $

求助:为什么程序总是执行一段时间后中断 而且没有任何异常 谢谢

问题描述 protectedvoidBegin_Click(objectsender,EventArgse){try{List<M_BaseInfo>list_Model=newB_BaseInfo().All_list_mode();for(intf=0;f<list_Model.Count;f++){M_BaseInfomodel=list_Model[f];B_Seobll=newB_Seo();List<string>list_KeyWord=newList<s

线程-关于quartz-2.2.1出现任务执行一段时间后不执行的问题

问题描述 关于quartz-2.2.1出现任务执行一段时间后不执行的问题 使用的是quartz-2.2.1.jar,当有很多任务(不同的执行时间)同时使用一个job后,有些任务执行一段时间后就是不自动执行(执行中断),而且上一次的执行是完成了的,没有任何报错.后来认为是线程的问题,我把quartz.properties中设置线程数量大于我的任务数,结果是执行时间会长一些,但是一段时间后,还是会中断,难道就只有分成多个job来执行了吗?请问大家是否遇到这样的问题,是怎么样解决的? 无日志,就像假死

win server服务器做迁移后,外网webservice地址在ie中无法访问了!!怎么办?!和网络有关?报错:由于连接方在一段时间后没有正确答复或连接的主机

问题描述 各位大虾帮帮忙啊!女汉纸感激不尽啊!windowserver服务器做过迁移后,外网webservice地址就无法访问了(ie里输入地址没办法打开).但是本地localhost可以正常打开service.asmx.外网例子:http://XXX.XXX.com/Service/service.asmx本地:http://localhost/Service/service.asmx完全不知道怎么办了..也不知道是不是跟迁移有关..请问:怎么判断问题出在哪里啊?如何修复?和网络有关吗?程序运