mysql查询后释放内存

我正在使用CodeIgniter从远程服务器导入大表.我一次将查询分成1000行.

这将是一个在后台运行的cron脚本.

$userDB是本地数据库对象,而$remoteDB是远程数据库对象

private function fetch_remote_db_table($remoteDB, $remoteTable, $localTable = FALSE){
    $success = FALSE;
    $returnObj = (object) array();

    //Use remote table name if local name not set.
    $localTable = ($localTable === FALSE) ? $remoteTable : $localTable;

    //Set the execution time and memory limit high, since this might take some work for the script
    ini_set('max_execution_time', 0);
    ini_set('memory_limit', '16000M');

    //Start by truncating the local table, which will be overwritten
    $this->userDB->truncate($localTable);

    //Get the remote table. This takes some time. Split up in chunks of 1000 rows
    $continue = TRUE;
    $counter = 0;
    while($continue){
        $limit = 1000;
        $offset = $counter*$limit;

        //Don't include offset in query if it's 0; CI will add it and break the query.
        if($offset == 0){
            $remoteDB->limit($limit);
        } else {
            $remoteDB->limit($limit, $offset);
        }

        $query = $remoteDB->get($remoteTable);
        $result = $query->result_array();

        if($query->num_rows() > 0){
            //Insert the remote data into the local table.
            if(!$this->userDB->insert_batch($localTable, $result)){$success = FALSE;}
        } else {$continue = FALSE;}
        $counter ++;
    }
    $this->output->enable_profiler(TRUE);
    var_dump(get_defined_vars());

    return $success;
}

我的问题是,每次迭代,结果都会留在内存中.如何在每次迭代后从内存中清除结果?理想情况下,我想保留查询中的元数据,但只删除所有行数据.

最佳答案 好的,经验教训.对于任何可能遇到相同问题的人:

CI插入查询也可以保存并占用内存.

在我的设置中我有:
$remoteDB这是我用来检索数据的远程连接

$userDB这是我本地数据库的连接,我插入了数据.这个有

 $userDB->save_queries = TRUE;

并且在没有看到任何变量被设置的情况下拿起我的记忆.

在循环之前将此设置为FALSE之后,我可以处理尽可能多的数据而不会耗尽内存.我得保留查询元数据.

点赞