Блокировки транзакций InnoDB при удалении данных из таблицы

Ситуация: есть несколько физических почтовых серверов (PowerMTA), отсылающих более четырёх миллионов сообщений в сутки. Есть виртуальный сервер базы данных (причём не очень мощный), на котором крутится с ; в базу данных пишутся логи доставки/не доставки сообщений и ведётся статистика по IP-адресам, VMTA и доменам. Попутно выполняется классификация и анализ hard и soft bounces. База за день увеличивается примерно на 5 гигабайт. Часть логов недельной давности удаляется. Далее »

Автор: , опубликовано в: MySQL, комментариев: 2
5
Фев
2011

Небуферизованные запросы: снижаем потребление памяти WordPress

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

Опытные программисты знают, что API предоставляет два варианта работы с результатом запроса:

  1. Последовательная обработка результата — при этом не происходит никакой буферизации результата, данные отдаются от сервера клиенту, минуя временные таблицы и буфера. В этом случае обработка результатов может производиться только последовательно.
  2. Буферирование результата запроса — результат полностью читается во временный буфер, что позволяет осуществлять произвольный доступ к результату.

Далее »

Автор: , опубликовано в: WordPress, комментариев: 26
2
Сен
2010

SQLMon для Code Igniter

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

Этот минимум в Code Igniter достигается очень просто: вызовом

[-]
View Code PHP
$this->output->enable_profiler(TRUE);

в контроллере. Но когда запросов на странице очень много, хотелось бы избавиться от рутинного выполнения EXPLAIN для каждого подозрительного запроса. Что, собственно, и делает . Возникает логичное желание интегрировать его в Code Igniter. Далее »

Автор: , опубликовано в: PHP, комментариев: 3
13
Фев
2010

SQLMon для Kohana 3

Продолжая славную традицию реализации под различные CMS/фреймворки, написал одному заказчику модуль для .

SQLMon для 3 интегрируется в иерархию классов Database (встраивается между классами Database_ и Kohana_Database_MySQL) и реализует обёртку над методом Kohana_Database_MySQL::query(), измеряя время выполнения запроса, объём потребляемой памяти, записывая код ошибки запроса, трассу вызовов и EXPLAIN запроса (причём не только для SELECT, но и UPDATE/DELETE и INSERT/REPLACE INTOAS или CREATE  TABLEAS) — всё то же самое, что и SQLMon для WordPress. Далее »

Автор: , опубликовано в: Kohana, комментариев: 4
9
Фев
2010

Оптимизация изображений без потерь

Внимание: в данной статье описывается скрипт оптимизации изображений для . Если вы ищите программу для оптимизации изображений для Windows, то это PictureBeaver.

Один из советов по ускорению загрузки сайта, который даёт Yahoo! Exceptional Performance Team — это оптимизация изображений. без потерь (рассматриваться будет именно она) позволяет уменьшить размер изображений (временами очень даже значительно) и за счёт этого уменьшить общее время, требуемое для загрузки страницы.

Уменьшение размера изображения без потери качества достигается рядом способов:

  • использование другого алгоритма сжатия данных либо использование более агрессивных параметров (как правило, чем выше степень сжатия, тем больше времени уходит на );
  • удаление информационных блоков, наличие или отсутствие которых не влияет на декодирование изображения;
  • оптимизация цветов (например, если изображение сохранено в формате PNG32 — 4 байта на пиксель, но реально используются только 16 цветов — 4 бита на пиксель, то оптимизация цветов (color reduction) позволит значительно уменьшить размер файла).

Yahoo! предоставляет бесплатный сервис Yahoo! Smush.it™, который позволяет оптимизировать графику в онлайн-режиме, но его использование не всегда удобно. Гораздо удобнее, когда всё можно сделать на своём компьютере. Далее »

Автор: , опубликовано в: Linux, комментариев: 15
28
Ноя
2009

Еще одна оптимизация NextGen Gallery

имеет одну неприятную особенность: при каждом обращении к блогу выполняется обновление (UPDATE в терминах ) таблицы wp_options. Хотя для «средних» блогов это не критично, для хорошо посещаемых ресурсов это плохо по ряду причин:

  1. Обновление таблицы wp_options сбрасывает кэш запросов MySQL к таблице wp_options, что приводит к необходимости реального выполнения запросов на выборку данных (с учётом огромного количества записей — благодаря всяким разным плагинам — это лишний трафик между и MySQL).
  2. Выполнение операции обновления таблицы при использовании MyISAM приводит к блокировке таблицы; при высокой посещаемости это приводит к вынужденному ожиданию освобождения таблицы и негативно сказывается на нагрузке и производительности.
  3. При использовании плагинов объектного кэширования каждый вызов update_option() приводит к необходимости обновления и записи кэша; обновление файлового объектного кэша приводит к лишним обращениям к диску (которых на виртуальных серверах лучше избегать).
  4. В конце концов, это лишний запрос, который не является необходимым.

Далее »

Автор: , опубликовано в: Патчи, комментариев: 18
23
Ноя
2009

PHP: красота кода сказывается на производительности: часть 2

В прошлой части:

  • if быстрее, чем switch;
  • echo быстрее, чем print;
  • явная проверка на (не)нулевое значение медленнее, чем неявная.

А также:

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

Продолжим. Далее »

Автор: , опубликовано в: PHP, комментариев: 4
7
Окт
2009

PHP: красота кода сказывается на производительности

Недавно я для себя открыл, что PHP не умеет оптимизировать код, а тут новый удар: оказывается, что красота кода отрицательно влияет на . Далее »

Автор: , опубликовано в: PHP, комментариев: 11
25
Сен
2009

SJ Hook Profiler — плагин для измерения производительности хуков

Сразу оговорюсь, что речь пойдёт совсем не о боксе, а о и .

Разработчики плагинов WordPress и bbPress используют две функции для расширения функциональности WordPress/bbPress: это add_action() и add_filter(). Первая служит для установки обработчика некоторого события, вторая — для установки фильтра. Под хуком подразумевается обобщённое понятие (либо фильтр, либо обработчик).

Как показывает практика, большая часть времени генерации страницы уходит именно на вызов обработчиков и фильтров. И когда возникает вопрос: почему время генерации страницы такое большое, а запроса всего три, и они выполняются за сотые доли секунды, на помощь приходит данный . Далее »

Автор: , опубликовано в: bbPress, Плагины WordPress, комментариев: 3
22
Сен
2009

Оптимизация байт-кода в PHP

Я давно задавался вопросом, насколько «умным» является интерпретатор в том, что касается оптимизации. В частности, меня всегда интересовала поддержка исключения неиспользуемого кода (известная как dead code elimination) и распространение константных значений (constant propagation). И теперь, когда я вплотную занялся изучением внутренностей , у меня такая возможность появилась. Далее »

Автор: , опубликовано в: PHP, комментариев: 2
15
Сен
2009