csv -> mysql, не уладываюсь в мемори лимит

vladka

Новичок
csv -> mysql, не уладываюсь в мемори лимит

читаем строчку из csv в буффер.
и записываем ее в базу.
Вообщем алгоритм довольно простой =)

Но есть одна проблема, при каждом выполнении запроса к базе увеличивается memory_usage().
увеличивается не сильно, порядка 1 000 байт на запросе. Но если размер csv прайса большой
(порядка 30 тыс строк), то возникают проблемы.

Возможно кто-то подскажет, может быть какие - то ресурсы нужно освободить после запроса и тп ?.


использую PDO.

получинную строчку из csv передают в функцию insertupdate.

/*
$table - название таблицы для вставки.
$fieldsValues - массив вида
@data = array(
'id' => $id,
'col1' => $col1,
'col2' => $col2
и тп.
)

PHP:
  public function insertupdate($table, $fieldsValues, $primarykey) {


     // делаю вид более удобным. 
    // заменяю значения на ?
      foreach($fieldsValues as $key => &$val) {
         $valUpdates[] = $val;
         $arUpdates[] = $key.' = ?'; 
      }

      $m = memory_get_usage();        


    // для update нужны все значения
      $duplicateUpdate = $arUpdates;
      $duplicateVal = $valUpdates;

   // Кроме primary key.
      $pos = array_search($primarykey, $duplicateUpdate);
      unset($duplicateUpdate[$pos]);
      unset($duplicateVal[$pos]);
     

       $m = memory_get_usage();
  // Создаю sql запрос
      $sql = "insert $table SET ";
      $sql .= join(', ', $arUpdates);
      $sql .= ' on duplicate key update '.join(' , ', $duplicateUpdate);
       $m = memory_get_usage();

      try {      

// мерджу параметы, делаю prepare
         $params = array_merge($valUpdates, $duplicateVal);
         $stmt = $this->_handle->prepare($sql);


// и собственно сам запрос
         $stmt->execute($params);
          $m = memory_get_usage();

         $id = $this->_handle->lastInsertId();
          $m = memory_get_usage();  

      } catch (PDOException $e) {

              echo $e->getMessage();*/

      }

      $m = memory_get_usage(); 

    // возвращяем новый id, если была вставка.   
      return $id;

   }

ну и собственно такой вопрос, это нормально что с каждым запросом php тянет память, либо все же где-то есть утечка ?

посоветуйте как делать более удобно memory profiling ?

спасибо.

-~{}~ 10.08.09 18:36:

вопрос снят, включил лог запросов (у себя в коде) оказалось он и ел память.
 

brook

Новичок
Используйте xdebug - он покажет где у вас происходит максимальный расход памяти - удобная штука
 

baev

‹°°¬•
Команда форума
Ничего, что топикстартером вопрос уже снят?
 

vladka

Новичок
>используй LOAD DATA INFILE
прайс не свой, какие либо параметры боюсь вставить нельзя
но за подсказку все равно спасибо.


>Используйте xdebug - он покажет где у вас происходит максимальный расход памяти - удобная штука

20 тыс строк продебажить не легко, ох не легко =)

Да топик закрыт, всем спасибо за ответы.
 

Alexandre

PHPПенсионер
20 тыс строк продебажить не легко, ох не легко =)
дебажить надо не 20 тыс, а 10...
прайс не свой, какие либо параметры боюсь вставить нельзя
проверяй на правильность - fopen/fread первые три строчки, потом делай Load Data.
Ничего, что топикстартером вопрос уже снят?
забываешь в какой стране живем... Страна Советов.
 
Сверху