mysql异常-SQLSTATE[HY000]: General error: 1436 Thread stack overrun

这个异常是因为mysql的数据库的线程缓存在程序运行时,大小不够导致内存溢出而报出的异常。
最简单粗暴的方式,就是修改数据库的线程缓存大小。
这里的线程缓存指的是,线程运行时,被分配的内存大小。还有一种线程缓存,是mysql的线程管理缓存,用来存放暂未被使用的线程信息,以便更快的处理链接需求。
如下:

1. 查看当前线程缓存大小
    show variables like 'thread_stack';
    我的是262144字节(256K)。
2. 编辑mysql配置文件,my.cnf
    [mysqld] 
    thread_stack =320k
3. 要重启服务器之后才能生效哦。

但是问题并不是这么简单,我的程序只是一个简单的批量存储,一条数据最多100个字节。问题出在哪里呢?

  1. 找到问题
    在程序报异常的地方,添加异常捕获。打印SQL语句
    发现竟然有2000+批量插入的语句。
  2. 计算一下占用空间
    2569 * 100 = 256900
    哈,真的是用没了呢
  3. 看一下程序为啥会有这么多批量插入
    原来业务数据问题,导致变体数量偶然增多。插入失败
  4. 最终解决方案
    修改批量插入规则。
    准备好批量插入的数据列表。
    按照500一次,分批插入。
  5. 结果
    完美解决这个问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落笔成名

客官,辛苦则个

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值