#php #mysql
#php #mysql
Вопрос:
У меня есть скрипт PHP 5, который перебирает таблицу MySQL (приблизительно 600 000 строк) и для каждой строки поддерживает ок. 16 других таблиц обобщенной информации на основе столбцов в каждой строке исходной таблицы (это делается путем проверки, существует ли итоговая строка, и если да, обновите ее, иначе вставьте).
Проблема в том, что по мере продолжения процесса mysqld.exe процесс съедает все больше и больше памяти, пока не исчерпает систему и не приведет к сбою PHP-скрипта. PHP-скрипт не набирает память, только mysqld.exe процесс. В PHP-скрипте каждое чтение из таблицы является free’d ( $resultset->free()
инструкция), поэтому все должно быть хорошо.
Комментарии:
1. Вам придется показать некоторый код… какие запросы вы выполняете, какие временные таблицы или переменные и т.д… Скорее всего, ваш процесс может быть оптимизирован для суммирования всего сразу, а не по строке за раз.
2. Вы также должны посмотреть / опубликовать свой
my.cnf
(или, может быть, этоmy.ini
в Windows). Там есть ограничения по памяти.
Ответ №1:
Вы уверены, что не достигаете максимального времени выполнения? Насколько быстр ваш запрос, когда вы выполняете его напрямую?
Комментарии:
1. Спасибо за ответы — это был не MySQL, а COM-вызов стороннего драйвера, который использовал память — моя ошибка 🙂
Ответ №2:
Спасибо за ответы — это был не MySQL, а COM-вызов стороннего драйвера, который использовал память — моя ошибка 🙂