Что может вызвать «слишком много соединений с базой данных» - PullRequest
4 голосов
/ 10 октября 2010

Мой веб-сайт Wordpress получил сообщение об ошибке «Ошибка при установлении соединения с базой данных».

Мой хост сообщил мне, что это потому, что у моего "пользователя" было слишком много соединений с базой данных, которые были открыты одновременно. Это вызвало ошибку при выполнении дополнительных подключений и, следовательно, при массаже.

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

Может кто-нибудь объяснить мне, как это могло произойти и как этого избежать?

(p.s: эта установка WP имеет более 2000 сообщений)

Ответы [ 5 ]

8 голосов
/ 10 октября 2010

Одна вещь, которую я видел, очень помогает при работе с WP и скоростью работы с базой данных - это очистка вашей базы данных от изменений постов и страниц.WP хранит полную копию каждой редакции, и с 2000 постами ваша база данных может быть огромной.Запустите это как SQL-запрос в phpmyadmin, чтобы очистить ревизии.Я видел, что базы данных уменьшаются на 75% и работают намного быстрее после очистки ревизий.Измените префикс таблицы, если вы изменили его при установке WP, и предварительно запустите резервное копирование.

DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision'

Затем оптимизируйте таблицы после выполнения этого запроса до завершенияочистка ревизий, либо из выпадающего меню в phpmyadmin для оптимизации всей базы данных, либо с помощью другого запроса только для таблицы сообщений:

OPTIMIZE TABLE wp_posts;

Затем вы можете предотвратить повторное накопление ревизий записей / страниц, добавив этустрока в wp-config.php для остановки ревизий:

define ('WP_POST_REVISIONS', FALSE);

Или эта строка для выбора количества ревизий для хранения:

define('WP_POST_REVISIONS', 3);

Если у вас есть доступ к вашему конфигурационному файлу MySQL, посмотрите настройку MySQL для повышения производительности с помощью утилиты, такой как GitHub - major / MySQLTuner-perl .

5 голосов
/ 10 октября 2010

В среде общего хостинга это поведение рано или поздно произойдет, когда ваш блог начнет видеть больше трафика - упомянутые вами особенности звучат так, как будто они могут быть связаны с плохо написанными плагинами WordPress (ради производительности, убедитесь, что все ваши плагины обновлены вместе с ядром WordPress).

Вы также можете рассмотреть WP Super Cache , если вы еще этого не сделали.

2 голосов
/ 10 октября 2010

Есть два варианта, которые вы можете посмотреть,

Постоянные соединения пытаются использовать одно и то же соединение с сервером MySQL снова и снова, если доступно (соединение не закрывается между запросами PHP).

MySQL max_connections позволяет увеличить количество возможных соединенийпринят сервером.

1 голос
/ 10 октября 2010

Слишком много соединений с базой данных может произойти, если у вас слишком много соединений с базой данных (очевидно), то есть больше людей, выполняющих запросы на вашем сайте за раз, чем максимально допустимое количество соединений.Сколько соединений разрешает ваш сервер mysql?

Используете ли вы mysql_pconnect () или просто mysql_connect ()?В первом случае соединение будет оставаться открытым дольше, и вы не сможете принудительно закрыть его.

1 голос
/ 10 октября 2010

Я не знаком с WordPress конкретно, поэтому вот мой взгляд с точки зрения настройки БД:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...