Проблема с VPS

SX
На сайте с 15.07.2008
Offline
79
928

приветствую ув. форумчане

проблемка такая...

есть VPS ОЗУ 1ГБ (гарантированно 750Мб), ~40 сайтов большинство (80%) на WP, трафа немного

10Гб в день (большинство боты), 75-80% 1 сайт (самопис - проблемный, ниже описал его)

в последнее время зависала БД (MySQL) - скрипты не могли приконнектиться, причём через панельку (Plesk) сервис показывает запущен - не останавливается и не перезагружается...

приходится весь контейнер перезагружать..

память чуть ли не всегда занята 50-80%, во вкладочке системные процессы - процесс /usr/sbin/mysqld - %CPU => ~30

тыкался мыкался... поставил munin (стату посмотреть).. заметил что есть медленные запросы (long query time - 10 сек)..

посмотрел их - большие траблы были с одной таблицей (данные на 85Мб + индекс 45 Мб, ~ 65.000 строк)

двиг самопис, с поиском по тексту из этой проблемной таблицы..

оптимизировать там особо нечего - индексы проставлены...

при отключении сайта (использующий проблемную таблицу), во вкладочке системные процессы - процесс /usr/sbin/mysqld - %CPU => до 15

остановил добавление новых материалов, удалил ~1/3 ненужных данных, таблица стала (данные на 50Мб + индекс 25Мб, ~38.000 строк)

сейчас крайне редко появляются медленные запросы - та же таблица НО

-------------------------------------------------------------------------

теперь довольно часто (пару раз за час) вешается apache - и все сайты отключаются... приходится контейнер перезагружать

munin удалил... без разницы - повис..

во вкладочке системные процессы - процесс /usr/sbin/mysqld - %CPU => постепенно растёт до ~40 иногда опускается до 30

в логе ошибок появилось следующее

[ERROR] /usr/sbin/mysqld: Out of memory (Needed 33554404 bytes)

[ERROR] Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space

понимаю не хватает ресурсов, MySQL перезагружается, а чего apache зависает?

и как правильно настроить MySQL, чтоб ничего не зависало и не отключалось (если не хватает ресурсов пусть подождёт пока освободятся)? - т.к. много сайтов (80%) на WP желательно под них

40 БД, самая большая 85Мб, остальные 55Мб, 40Мб, 30Мб, 20Мб, парочка 15Мб, остальные <10Мб

вот некоторые значения

table open cache - 131,072

tmp table size - 256Мb

max heap table size - 256Мb

если нужны какие ещё - скажите, сообщу..

Den73
На сайте с 26.06.2010
Offline
523
#1

"понимаю не хватает ресурсов, MySQL перезагружается, а чего apache зависает?"

что значит зависает, в error log смотрите чего он пишет

"и как правильно настроить MySQL, чтоб ничего не зависало и не отключалось"

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

"

table open cache - 131,072

tmp table size - 256Мb

max heap table size - 256Мb

"

ну и куда вы столько накрутили, рекомендую вернуть дефолтный конфиг для начала.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#2

запросы к базе проблемные покажите и желательно их план выполнения

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
SX
На сайте с 15.07.2008
Offline
79
#3

Den73, error_log при зависании чист - браузер не может найти сервер...

дефолтного конфига уже нет - давно меняли эти цифры - норм всё работало... оч редко раз в 3-4 мес отключался.. поищу в гугле что нибудь.. спасибо!

Оптимизайка, не сохранил его.. как будет выложу.. план выполнения - explain? отдельно выполнить медленный запрос в phpmyadmin с ним?

помню делали изменения настройки mysql из-за красных цифер в phpmyadmin - вкладка состояние..

Created tmp disk tables, увеличили tmp_table_size и max_heap_table_size - циферка осталась красной но заметно меньше.. сейчас 850

Opened tables, увеличили table_open_cache - циферка сейчас тоже красная => 165

вот медленный запрос (1 за 25 мин)

SELECT * FROM brand 
INNER JOIN model ON brand.id=model.brand_id
INNER JOIN modification ON brand.id=modification.brand_id AND model.id=modification.model_id
WHERE brand.status="1" AND model.status="1" AND modification.status="1" ORDER BY modification.date LIMIT 14144, 8;

Explain - причём был выполнен довольно шустро - макс пару сек.. никак не 10,6 как в логе

S5
На сайте с 04.01.2010
Offline
77
#4

Индексы стоят на все 3 интовых поля? Date в каком формате хранится? Unix timestamp? Индекс проставлен? Сколько времени ъвыполняется данный запрос?

izbushka
На сайте с 08.06.2007
Offline
110
#5
SpaceX:
Explain - причём был выполнен довольно шустро - макс пару сек.. никак не 10,6 как в логе

из таблицы brand выборка не использует индексы. Постройте индекс или перепишите запрос

SX
На сайте с 15.07.2008
Offline
79
#6

sg552, индексы стоят, поле `date` тип DATETIME - без индекса

izbushka, поле `id` - стоит индекс PRIMARY..

убрал все изменения в my.cnf - по идее он берёт дефолтные значения, с mysql всё норм - медленные запросы были, но не зависал и ошибок не выдавал.. а вот с apache проблемка была вчера - завис, сайты были не доступны..

отключил проблемный сайт, посмотрим что да как будет... по нагрузке всё ~ на прежнем урвне

izbushka
На сайте с 08.06.2007
Offline
110
#7
SpaceX:
поле `id` - стоит индекс PRIMARY..

Это, несомненно, замечательно, однако в условии используется поле WHERE brand.status="1" .

SX
На сайте с 15.07.2008
Offline
79
#8

если ставить на все поля индекс - то размер индекса будет больше самих данных :)

`status` или 0 или 1 - TINYINT...

сайт отключили, но особой разницы не заметили пока...

izbushka
На сайте с 08.06.2007
Offline
110
#9
SpaceX:
если ставить на все поля индекс - то размер индекса будет больше самих данных

`status` или 0 или 1 - TINYINT...

Не на все поля, а на те по которым идет выборка. А у вас как раз наоборот.

status, если он 0 или 1, удобнее делать не tinyint a enum('0','1')

SX
На сайте с 15.07.2008
Offline
79
#10

izbushka, спасибо - учту этот момент...

по id склеиваю, по текстовым полям поиск работает, статус - показывать в результах или нет и дата для сортировки... можно конечно отказаться от даты и использовать id - но опять же неужели из-за этого VPS ложится? ))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий