mysql大数据插入删除同时进行,删除出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql大数据插入删除同时进行,删除出错相关的知识,希望对你有一定的参考价值。

现在公司在做一个项目,需要对同一张表进行日志的插入与删除,插入采用批处理的方式,进行新日志的插入,删除用delete方式,删除过期的日志,每天插入的日志量大约是15个G左右,那删除过期日志也是按天,也大约是15个G,在删除过程中,总出现这样的问题,java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2548)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1605)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1524)
at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:196)
at com.lenovo.soc.logmgmt.logconfig.db.logmgmt_DelLogAuto.dellastlog(logmgmt_DelLogAuto.java:209)
at com.lenovo.soc.logmgmt.LogDelService.delEarliestLog(LogDelService.java:233)
at com.lenovo.soc.logmgmt.LogDelService.run(LogDelService.java:114)
(1281547 ms) [Thread-120] INFO : com.lenovo.soc.logmgmt.logconfig.db.logmgmt_DelLogAuto#info : 删除最早一天的记录错误
16:03:34,937 INFO [ db.logmgmt_DelLogAuto] - 删除最早一天的记录错误
java.sql.SQLException: Connection is closed.
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.checkOpen(PoolingDataSource.java:219)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:337)
at com.lenovo.soc.logmgmt.logconfig.db.logmgmt_DelLogAuto.dellastlog(logmgmt_DelLogAuto.java:233)
at com.lenovo.soc.logmgmt.LogDelService.delEarliestLog(LogDelService.java:233)
at com.lenovo.soc.logmgmt.LogDelService.run(LogDelService.java:114)
请教各们高手,该如何解决?

删除数据过多,然后锁超时,因为在删除数据的时候数据是被锁住的,我以前删除时也遇到过,后来分批删除来做的,每删除一万条数据提交一次,具体删除多少合适,你可以自己试试看,分批提交效率理论上肯定不如一次性提交高,但是可以避免这种超时错误,所以自己找一个平衡点吧 参考技术A java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
数据库的格式。是行锁还是表锁,在个数据量太大时。java session超时。

以上是关于mysql大数据插入删除同时进行,删除出错的主要内容,如果未能解决你的问题,请参考以下文章

java中使用mysql批量插入大文本(二进制)数据时出错

用于对大型数组进行高效插入和删除的数据结构

MySQL:非常慢的更新/插入/删除查询挂在“查询结束”步骤

如何有效处理大文件中间的插入或删除?

MySql中LongText类型大字段查询优化

大数据操作:删除和去重