分页查询耗尽内存

时间:2012-06-05 10:29:28

标签: php mysql limit

我想将BIG表导出为CSV,因为无法一次选择所有数据并导出,我打开一个文件句柄进行编写并调用此函数进行查询并循环遍历不同的页面,I&#39 ; m调用页面大小为20,实际上很小,但执行一段时间后(可能是30分钟),会导致此错误:

Fatal error: Allowed memory size of 100663296 bytes exhausted (tried to allocate 85 bytes) in /usr/home/www/wp-includes/wp-db.php on line 1402

这是函数,$ fichero是alraedy打开的文件句柄,$ pagina_size在上次测试中的值为20:

function sql2csv_streamed($fichero, $sql, $pagina_size=50)
{
    global $wpdb;
    $limite1 = 0;
    $limite2 = $pagina_size-1;

    $sql_pagina = $sql . " limit $limite1,$limite2";
    error_log($sql_pagina);

    // Add all values in the table
    while ($rsSearchResults = $wpdb->get_results($sql_pagina, ARRAY_A))
    {
        foreach ( $rsSearchResults as $res )
        {
            fputcsv ($fichero, $res , ";");
        }
        $limite1 += $pagina_size;
        $limite2 += $pagina_size;

        $sql_pagina = $sql . " limit $limite1,$limite2";
        error_log($sql_pagina);
    }
}

谢谢

0 个答案:

没有答案