报错如下:SQLSTATE[HY000]: General error: 1436 Thread stack overrun: 246160 bytes used’mysqld --thread_stack=#’ to specify a bigger stack.
解决方式一之简单粗暴改配置:
https://www.cnblogs.com/jqmtony/p/10534979.html
Thread_stack:每个连接线程被创建时,MySQL给它分配的内存大小。当MySQL创建一个新的连接线程时,需要给它分配一定大小的内存堆栈空间,以便存放客户端的请求的Query及自身的各种状态和处理信息。
查看连接线程相关的系统变量的设置值: show variables like ‘thread%’;
这就是mysql的thread_stack连接线程的优化:
http://www.cppcns.com/shujuku/mysql/184343.html
如果还解决不了,
或者觉得不够优雅,
那么请看解决方式二之简化sql语句:
分批处理,减少sql的长度
1、单条不复杂的sql语句简化:
$data = array_chunk($data,1000); //分割数组
foreach($data as $item){
//查询、写入或者更新TODO
}
2、多条稍微复杂的sql语句简化:
//定义总操作长度
$totalCount = 5989;
//定义分页
$pageSize = 1000;
$num = ceil($totalCount /$pageSize);
//以批量查询举例,此数组存查询结果集
$dataArr = [];
for ($i = 0;$i<$num;$i++){
//处理页码
if($i<=0) $i = 1;
$start = ($i - 1) * $pageSize;
//查询TODO
$sql = "查询语句 limit {$start},{$pageSize}";
//得到结果再循环拼接条件sql再查询等等略
$data = "执行查询sql";
$dataArr = array_merge($dataArr,$data);
unset($data);
}