n-wp.ru — блог о WordPress
Как снизить пиковое потребление оперативной памяти Wordpress за счет небуферизованных запросов к базе данных | n-wp.ru

Как снизить пиковое потребление оперативной памяти WordPress за счет небуферизованных запросов к базе данных

Прочитал в блоге Ars Longa, Vita Brevis о том, как можно снизить пиковое потребление оперативной памяти совершенно бесплатно, заменив всего лишь одну функцию в системной файле WordPress. Автор статьи говорит о том, что пиковое потребление оперативной памяти снижается почти в два раза, поэтому грех не воспользоваться таким советом.

Абстрактная картинка для отвлечения внимания

Так в чем же секрет? А секрета никакого нет, а есть хитрость работы с MySQL. При запросе к базе данных есть два варианта работы с результатами — сохранение результатов запроса в буфер или последовательная обработка результата.

WordPress использует именно первый вариант, который отличается агрессивным использованием оперативной памяти: выделяется память для временного буфера, в который записывается весь результат запроса, затем создается локальная копия результата запроса, и лишь только после этого временный буфер освобождается.

В итоге потребляется в два раза больше памяти, чем нужно для второго варианта, при котором никакой буферизации не происходит, все результаты отдаются сервером напрямую к клиенту, минуя создание всяких временных таблиц в буфере, обработка результатов производится последовательно.

В общем, не буду больше утомлять вас разбором механизмов буферизации, а перейду сразу к рецепту. В первом варианте используется функция mysql_query(), а во втором — mysql_unbuffered_query(). Значит нужно одну функцию заменить другой. Находим файл /wp-includes/wp-db.php, создаем на всякий случай его резервную копию, и меняем в нем

на

На этом все.

tiaurus

Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

5 комментариев

  • Очень познавательная статья, но хотелось бы услышать во первых использует ли сам автор сейчас эту фишку, а также интересны отзывы тех кто пользуется и отзывы так сказать экспертов. Просто не хочется хакать блог не подумав.

  • Как определить, что есть улучшение? Себе сделал, но основные показатели запрос-время-оперпамять теже.

  • Попробовал. Но так как у меня стоит eaccelerator и memcached исключительно для буферизации запросов к mysql, то я получил проигрыш по памяти примерно в 400 килобайт. :)

/* ]]> */