比来在做一个项目,此中一需求是:项目组数据库中的数据须要按时删除掉(满足必然前提,比如7天前的数据都不保存)
最初的履行办法:
应用Quartz按时履行数据库操纵,进行数据删除,数据库操纵应用语句
最开端数据少的时辰,没有题目,后来跟着数据量变大,履行这个任务后台就报错了,具体错误信息是:
1206 SQLSTATE: HY000 (ER_LOCK_TABLE_FULL) 题目
google了一把,大师给出的解决办法
第一种:
查看 max_write_lock_count 和 innodb_buffer_pool_size参数的值,批改 innodb_buffer_pool_size的值,增大到合适需求,关于值设置可以参考
http://wangwei007.blog.51cto.com/68019/967278
默认值如下:
第二种:
让用Limit来限制每次写的行数,然则我在代码中已经做了,所以这个应当是解决不了我的题目。
实践证实:应用来删除较大数据是不靠谱的,最后批改实现办法,达到删除的目标。
创建存储过程,存储过程履行步调:
1)创建一个表布局和目标表布局雷同的备份表,数据选择目标表中须要保存的(及不满足删除前提的)
2)履行 号令,将目标表清空
3)把步调 1)中筹办好的备份表数据全部导入到空的目标表中
经由过程上方这个存储过程,顺利完成了目标需求,天天稳定履行删除记录任务。
再回到最初的题目:
1206 SQLSTATE: HY000 (ER_LOCK_TABLE_FULL) mysql报的这个错误,从mysql官网上,可以看到对于这个错误类型的申明:
错误:1206 SQLSTATE: HY000 (ER_LOCK_TABLE_FULL)
消息:总的锁定命超出了锁定表的大小。
mysql的表什么时辰会被锁,被锁的处理惩罚应当是怎么样的,还要持续研究。。。。
--转自