Вложенные транзакции в PDO

В есть такая особенность: отсутствие поддержки вложенных транзакций.

Вложенные транзакции бывают весьма полезны: например, у нас есть два сервиса, которые могут взаимодействовать между собой. Сервис А начинает транзакцию, что-то делает, затем вызывает сервис Б, затем подтверждает транзакцию.

Может так случиться, что сервисы А и Б разрабатываются разными людьми и разработчик сервиса Б может не знать, что сервис А уже начал выполнение транзакции. Как следствие, при использовании PDO как только сервис Б попытается начать транзакцию, PDO выбросит исключение, предупреждающее о наличии активной транзакции.

Тем не менее, такие СУБД как и поддерживают вложенные транзакции (о чём PDO не знает). Поэтому было бы неплохо добавить поддержку вложенных транзакций для данных СУБД в PDO. Далее »

Автор: , опубликовано в: PHP, комментариев: 4
6
Авг
2011

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

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

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

Дельта-бэкапы баз данных

На одном из серверов с большим числом пользователей у нас настроено автоматическое создание резервных копий баз данных — четыре раза в день. Стоит отметить, что размер сжатых резервных копий всех баз данных превышает 400 мегабайт. Таким образом, за один день на резервные копии баз данных уходит около двух гигабайт дискового пространства. Две недели — почти 30 гигабайт. Расточительство.

Для экономии места мы изобрели велосипед под названием «дельта-бэкап» (известный как разностный бэкап, differential backup) — мы храним одну полную резервную копию базы данных и список изменений.

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

Автор: , опубликовано в: Linux, комментариев: нет
28
Сен
2010

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

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

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

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

Далее »

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

Исправление ошибки в INSERT INTO … SELECT в Kohana 3 при использовании конфигурации базы данных, отличной от default

Ситуация: нужно выполнить запрос вида

[-]
View Code SQL
INSERT INTO `table` (`col1`, `col2`) SELECT * FROM `table` WHERE `col1` <> 0;

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

Автор: , опубликовано в: Kohana, комментариев: нет
12
Авг
2010

Поддержка JOIN в запросах DELETE для Kohana 3

Иногда бывает полезно выполнить удаление записей в нескольких связанных таблицах, благо синтаксис позволяет. Разумеется, есть такая вещь как каскадное удаление записей, но в случае с (а именно — таблицами MyISAM) на неё надеяться не приходится.

Модуль Database из 3 не умеет использовать JOIN с операцией DELETE. Нужно ему помочь. Далее »

Автор: , опубликовано в: Kohana, комментариев: нет
11
Авг
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/фреймворки, написал одному заказчику модуль для 3.

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

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

Ужасы таксономии в WordPress

Внутренняя реализация управления таксономиями в WordPress — это просто кошмар какой-то. Мало того, что код написан в процедурном стиле (использование ООП помогло бы решить некоторые проблемы с производительностью, которые иначе можно решить только глобальными переменными), он к тому же очень плохо масштабируется.

Я взял свежую дефолтную инсталляцию  2.8-bleeding, сгенерировал тестовый контент и пошел искать недоработки и проблемы с производительностью. Одну из них я нашел очень быстро: при попытке удалить категорию, в которой была 1,001 ночь запись.

На неслабом сервере это заняло около 20 секунд и… более 12,000 запросов (да-да, двенадцати тысяч, я количеством ноликов, увы, не ошибся). Далее »

Автор: , опубликовано в: WordPress, комментариев: 16
9
Июн
2009

Увеличение производительности плагина NextGen Gallery

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

Автор: , опубликовано в: WordPress, комментариев: 2
6
Июн
2009