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

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

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

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

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

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

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

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

mysql_query

на

mysql_unbuffered_query

На этом все.

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. Виктор

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

    Ответить
    1. tiaurus

      Да, я использую сейчас эту фишку.

      Ответить
  2. FHD

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

    Ответить
    1. При низкой посещаемости (до 1000 в день) выигрышь практически незаметен.

      Ответить
  3. den

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

    Ответить
×
WordPress:
прокачай свой сайт!

Скидка на премиум темы и плагины

Успей забрать скидку ⋙