ReactOS Tech talk in Google Montreal by Alex Ionescu in 2013

Опубликовано: 26.03.2017

видео ReactOS Tech talk in Google Montreal by Alex Ionescu in 2013

Калькулятор печати "Бизнес-принт"

Есть веб-сайт на Друпал. Издавна работает, не 1-ый год. Вырос по размерам. Но в ближайшее время я начал замечать, что при сохранении новейшей ноды (странички, подшивки) Друпал время от времени выдает мне целую страничку ошибок:


ReactOS Tech talk in Google Montreal by Alex Ionescu in 2013

Смотрится приблизительно так:

Warning: MySQL server has gone away query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (1, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:105:\"Server shutdown in progress\nquery: DELETE FROM cache_menu WHERE cid LIKE 'links:book-toc-155:%'\";s:5:\"%file\";s:43:\"/home/afportal.ru/htdocs/includes/cache.inc\";s:5:\"%line\";i:175;}', 3, '', 'http://www.afportal.ru/node/1427/edit', 'http://www.afportal.ru/node/1427/edit', '93.85.64.145', 1235216680) in /home/afportal.ru/htdocs/includes/database.mysql.inc on line 128


Установка и настройка плагина КиноПоиск в ВордПресс

Warning: MySQL server has gone away query: SELECT * FROM system WHERE type = 'theme' in /home/afportal.ru/htdocs/includes/database.mysql.inc on line 128

Warning: MySQL server has gone away query: SELECT data, created, headers, expire, serialized FROM cache WHERE cid = 'theme_registry:' in /home/afportal.ru/htdocs/includes/database.mysql.inc on line 128

Warning: MySQL server has gone away query: UPDATE cache SET data = 'a:155:{s:18:\"aggregator_wrapper\";a:7:{s:9:\"arguments\";a:1:{s:7:\"content\";N;}s:4:\"file\";s:39:\"modules/aggregator/aggregator.pages.inc\";s:8:\"template\";s:37:\"modules/aggregator/aggregator-wrapper\";s:4:\"type\";s:6:\"module\";s:10:\"theme path\";s:18:\"modules/aggregator\";s:11:\"theme paths\";a:1:{i:;0s:18:\"modules/aggregator\";}s:20:\"preprocess functions\";a:2:{i:;0s:19:\"template_preprocess\";i:1;s:38:\"template_preprocess_aggregator_wrapper\";}}s:27:\"aggregator_categorize_items\";a:7:{s:9:\"arguments\";a:1:{s:4:\"form\";N;}s:4:\"file\";s:39:\"modules/aggregator/aggregator.pages.inc\";s:4:\"type\";s:6:\"module\";s:10:\"theme path\";s:18:\"modules/aggregator\";s:8:\"function\" in /home/afportal.ru/htdocs/includes/database.mysql.inc on line 128

Warning: MySQL server has gone away query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (1, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:105:\"MySQL server has gone away\nquery: SELECT menu_name FROM menu_links WHERE expanded != 0 GROUP BY menu_name\";s:5:\"%file\";s:42:\"/home/afportal.ru/htdocs/includes/menu.inc\";s:5:\"%line\";i:2011;}', 3, '', 'http://www.afportal.ru/node/1427/edit', 'http://www.afportal.ru/node/1427/edit', '93.85.64.145', 1235216681) in /home/afportal.ru/htdocs/includes/database.mysql.inc on line 128

Warning: MySQL server has gone away query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (1, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:119:\"MySQL server has gone away\nquery: UPDATE variable SET value = 'a::{}' 0WHERE name = 'menu_expanded'\";s:5:\"%file\";s:47:\"/home/afportal.ru/htdocs/includes/bootstrap.inc\";s:5:\"%line\";i:509;}', 3, '', 'http://www.afportal.ru/node/1427/edit', 'http://www.afportal.ru/node/1427/edit', '93.85.64.145', 1235216681) in /home/afportal.ru/htdocs/includes/database.mysql.inc on line 128

.........................

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

Что делать? Находил ответ на drupal.ru, ничего понятного не отыскал. Стал переписываться с хостером. Разбирались практически 2 денька, но, к чести хостера (www.atservers.com - Минск), им удалось отыскать ошибку.

Вот кусок переписки:

Хостер:

> Ok. Вы получаете эту ошибку спустя какое-то время при сохранении (ок. 30 сек) либо мгновенно?
> --
> С почтением, Роман Шишнев

Я:

Через 30 секунд, при этом время от времени по пару раз попорядку, а время от времени сходу нормально сохраняется. Еще одна особенность: 1-ая часть запросов успевает выполниться, а другие - нет.

Хостер:

Вам необходимо почистить/улучшить базу данных и запросы к ней. Запросы более 30 секунд автоматом прерываютя mysql-сервером. После чего mysql-сервер закрывает соединение и, соответственно, все другие запросы в соединении возвращают ошибку "MySQL server has gone away". Потому Ваш "drupal" тормозит 30 секунд на каком-нибудь запросе, а после все другие вываливаются с ошибкой.

Я:

Стоит самая последняя версия CMS.
База данных, естественно, разрослась, но ошибка возникает не всегда.

Есть некие скрипты для оптимизации БД , но я там не очень разбираюсь.

http://www.drupal.ru/node/24492 - для починки.
http://drupalcookbook.ru/recept/analiz-proizvoditelnosti-bazy-dannyh-mysql - для оптимизации.
Они запускаются на виртуальном хостинге?

Хостер:

> Стоит самая последняя версия CMS.
>
> База данных, естественно, разрослась, но ошибка возникает не всегда.
>

Как вариант запрос типа "UPDATE" более 30 секунд ожидает окончания нескольких SELECT'ов от параллельных соединений, которые заблокируют таблицу. Либо напротив (SELECT ожидает UPDATE'ы). В данном случае Вам необходимо проанализировать и улучшить (сделать индексы в полях, по которым происходит подборка SELECT'ом) таблицы для минимализации времени выполнения запросов. Может быть, где-нибудь даже получится уменьшить размер таблиц.

> Есть некие скрипты для оптимизации БД , но я там не очень
> разбираюсь.
>
> http://www.drupal.ru/node/24492 - для починки.

Заместо этого скрипта довольно сделать "OPTIMIZE TABLE " для каждой таблицы в базе данных. Это можно сделать даже в phpMyAdmin.

> http://drupalcookbook.ru/recept/analiz-proizvoditelnosti-bazy-dannyh-mysql - для оптимизации.
Эта статья предлагает скорректировать характеристики mysql-сервера для роста производительности. В нашем случае mysql-сервер уже очень оптимизирован.

=============

Вот оно! Моя база данных разрослась за пару лет до значимых размером (со включенным кэшированием занимает около 150-200 мб), потому часть запросов время от времени тормозила и высыпала сервер.

Решение трудности:

в phpMyAdmin я вручную выбирал "Отметить требующие оптимизации" и позже "С отмеченными: улучшить таблицу". Приблизительно 10-15 таблиц было оптимизировано, после этого любые мои ноды замечательно сохранялись. И было чувство, что веб-сайт даже стал работать резвее. В большинстве случаев оптимизации добивались обозначенные ниже таблицы.

В предстоящем я заавтоматизировал процесс кроном:

$link = mysql_connect("хост", "юзер", "пароль")
or die("Could not connect: " . mysql_error());

mysql_select_db("... ваша БД....");

$result = mysql_query("OPTIMIZE TABLE batch, book, cache, cache_update, cache_filter, cache_form, cache_menu, cache_page, comments, comment_notify, files, flood, history, node, node_comment_statistics, node_revisions, menu_links, search_dataset, search_total, search_index, search_node_links, sessions, term_data, term_hierarchy, term_node, upload, variable, watchdog");

?>

Зависимо от установленных модулей ваш набор таблиц может быть другой.

P.S. Я надеюсь, что на веб-сайте по пропедевтике внутренних заболеваний оптимизация БД не пригодится, потому что он еще небольшой. :)

rss