Как бороться с утечкой памяти при экспорте данных в Yii2?

Делаю экспорт в CSV относительно dataProvider. Но получается, что в какой-то момент на сложной view (более 10 join) падает с ошибкой о нехватке памяти PDO.

Код:

private function writeContentRowsQuery() {
    $offset = 0;
    
    while ($queryResult = $this->dataProvider->query->limit($this->_settings['limit'])->offset($offset)->createCommand()->queryAll()) {
        foreach ($queryResult as $row) {
            $rowData = [];
            
            foreach ($this->_visibleColumns as $visibleColumn) {
                $rowData[] = $this->getDataCellQueryValue($visibleColumn, $row);
            }
            
            fputcsv($this->_csv, $rowData, ';');
            ob_flush();
            flush();
            
            unset($rowData);
            gc_collect_cycles();
        }
        
        $offset += $this->_settings['limit'];
        
        unset($queryResult);
        gc_collect_cycles();
    }
    
    gc_collect_cycles();
}

Здесь идет инициализация процесса так:

ob_start();
$this->_csv = fopen('php://output', 'wb');

if (!empty($this->contentBefore)) {
    $this->writeBeforeContentRows();
}

$this->writeColumnHeaders();
$this->writeContentRowsQuery();
fclose($this->_csv);

Что делать в таком случае?

Ошибки: PDOException: SQLSTATE[54000]: Program limit exceeded: 7 ОШИБКА: нехватка памяти DETAIL: Не удалось увеличить строковый буфер

Орет на строки:

  1. ob_flush(); о том, что Headers already sent
  2. while ($queryResult = $this->dataProvider->query->limit($this->_settings['limit'])->offset($offset)->createCommand()->queryAll()) о нехватке памяти

Ответы (0 шт):