MySQL 在多次查询后内存不足


MySQL running out of memory after multiple queries

我正在尝试遍历两个表并拉取记录。 表有数十万行,所以我知道一次拉取它们是行不通的,所以循环并批量拉取它们似乎是最好的方法,但它不会释放内存,所以在几次拉动后它会耗尽内存并崩溃。

我的输出

   400000 已拉动,当前在 0 ||出1623230    400000 已拉动,当前在 400000 ||出1623230    致命错误:在第 38 行的 C:''xampp''htdocs''misc''manage tickets''test2.php中允许的 536870912 字节内存大小耗尽(尝试分配 39 个字节)

忽略行号,我在文件顶部有一个巨大的注释掉的代码块。

代码为:

$iterate = 400000;

$query = "SELECT id FROM $old_db.ticketaudit_archive";
$get = $g_mysqli->query($query);
$count = $get->num_rows;
$i = 0;
while($i <= $count){
    $query = "SELECT * FROM $old_db.ticketaudit_archive LIMIT $i, $iterate";
    $get = $g_mysqli->query($query);
    echo $get->num_rows.' Pulled, currently on '.$i.' || Out of '.$count.'<br>';
    while($z = $get->fetch_assoc()){
        $old_ticket_id = $z[old_ticket_id];
        $ticket_id = $z[ticket_id];
        unset($z[old_ticket_id], $z[ticket_id], $z[id]);
        if($old_ticket_id != ''){
            $ticketaudit[old_ticket_id][$old_ticket_id][] = $z;
            $xx += 1;
        }
        elseif($ticket_id != ''){
            $ticketaudit[ticket_id][$ticket_id][] = $z;
            $xx += 1;
        }
    }
    $i += $iterate;
    $get->free();
    $get->free_result();
    $get->close();
}

我整天都在做这件事,找不到让MySQL删除以前查询的该死的内存缓存的方法。

我想你可能正在寻找无缓冲的查询:

未缓冲的MySQL查询执行查询,然后在MySQL服务器上仍在等待获取数据时返回资源。这在 PHP 端使用较少的内存,但会增加服务器上的负载。除非从服务器获取完整结果集,否则无法通过同一连接发送进一步的查询。未缓冲的查询也可以称为"使用结果"。

下面是一个未缓冲的查询示例:

$get = $g_mysqli->query($query, MYSQLI_USE_RESULT);

您可以在此处阅读更多内容