这个异常是因为mysql的数据库的线程缓存在程序运行时,大小不够导致内存溢出而报出的异常。
最简单粗暴的方式,就是修改数据库的线程缓存大小。
这里的线程缓存指的是,线程运行时,被分配的内存大小。还有一种线程缓存,是mysql的线程管理缓存,用来存放暂未被使用的线程信息,以便更快的处理链接需求。
如下:
1. 查看当前线程缓存大小
show variables like 'thread_stack';
我的是262144字节(256K)。
2. 编辑mysql配置文件,my.cnf
[mysqld]
thread_stack =320k
3. 要重启服务器之后才能生效哦。
但是问题并不是这么简单,我的程序只是一个简单的批量存储,一条数据最多100个字节。问题出在哪里呢?
- 找到问题
在程序报异常的地方,添加异常捕获。打印SQL语句
发现竟然有2000+批量插入的语句。 - 计算一下占用空间
2569 * 100 = 256900
哈,真的是用没了呢 - 看一下程序为啥会有这么多批量插入
原来业务数据问题,导致变体数量偶然增多。插入失败 - 最终解决方案
修改批量插入规则。
准备好批量插入的数据列表。
按照500一次,分批插入。 - 结果
完美解决这个问题