Фреймворки → Zend DB съедает память
Бывает, так, что валится ошибка и нужно быть телепатом, что бы продетектить эту ошибку. Так было и в этот раз.
При попытке забрать данные при помощи fetch, fetchAll, fetch*, find, findParentRow и т.д… выдает ошибку.
То, что это Zend_DB стало понятно немного позже. Zend_DB некорректно работает с типами LONGTEXT И LONGBLOB и эту проблему разработчики zend framework еще не решили. При формировании sql запроса Zend_DB смотрит на типы полей таблицы и пытается выделить память под будущей массив записей для каждой ячейки таблицы в соответствии с ее максимальным размером.
Для справки, размер LONGTEXT 4GB (2 в степени 32 – 1) символов т.е. даже, если размеры ваше таблицы не превышают 10kb, но в ней есть злостное поле LONGTEXT или LONGBLOB, то скорее будет хана.
Рецепт лечения простой — LONGTEXT меняем на MEDIUMTEXT (его размер 16Mb), а еще лучше на varchar(64000), но это совсем другая история:)
Для неверующих и читающих на английском http://framework.zend.com/issues/browse/ZF-1498
При попытке забрать данные при помощи fetch, fetchAll, fetch*, find, findParentRow и т.д… выдает ошибку.
Fatal error: Out of memory (allocated 12058624) (tried to allocate 4294967294 bytes)
То, что это Zend_DB стало понятно немного позже. Zend_DB некорректно работает с типами LONGTEXT И LONGBLOB и эту проблему разработчики zend framework еще не решили. При формировании sql запроса Zend_DB смотрит на типы полей таблицы и пытается выделить память под будущей массив записей для каждой ячейки таблицы в соответствии с ее максимальным размером.
Для справки, размер LONGTEXT 4GB (2 в степени 32 – 1) символов т.е. даже, если размеры ваше таблицы не превышают 10kb, но в ней есть злостное поле LONGTEXT или LONGBLOB, то скорее будет хана.
Рецепт лечения простой — LONGTEXT меняем на MEDIUMTEXT (его размер 16Mb), а еще лучше на varchar(64000), но это совсем другая история:)
Для неверующих и читающих на английском http://framework.zend.com/issues/browse/ZF-1498



