Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Обычно сервер (выделенный, Apache 2.2.11, FreeBSD 6.3, MySQL 5.0.75, MyISAM, порядка 20 тыс хостов, кеширование - вкл.) работает хорошо, но иногда MySQL уходит в ступор.
Начинают собираться процессы. В phpMyAdmin это выглядит так:
когда собирается слишком много процессов, соответственно появляется ошибка Too many connections
В логах ничего странного не вижу:
.....
106619 Query SELECT * FROM dle_users where name='*****' and password='*****'
106619 Quit
106332 Quit
106620 Connect base@localhost on
106620 Init DB base_dle
106620 Query /*!40101 SET NAMES 'cp1251' */
106620 Query SELECT * FROM dle_users where name='*****' and password='*****'
106620 Query SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags FROM dle_post where id = '8708'
106620 Query INSERT INTO dle_views (news_id) VALUES ('8708')
106620 Query SELECT * FROM dle_thanks
WHERE user_name = '*****' and id_post = '8708'
106620 Query SELECT * FROM dle_thanks
WHERE id_post = '8708' ORDER by id ASC
106620 Query SELECT id, name, onserver, dcount FROM dle_files WHERE news_id = '8708'
106620 Query SELECT dle_comments.id, post_id, dle_comments.user_id, date, autor as gast_name, dle_comments.email as gast_email, text, ip, is_register, name, dle_users.email, news_num, comm_num, user_group, reg_date, signature, foto, fullname, land, icq, xfields FROM dle_comments LEFT JOIN dle_users ON dle_comments.user_id=dle_users.user_id WHERE dle_comments.post_id = '8708' ORDER BY date DESC LIMIT 0,30
090805 19:43:38 106621 Connect base@localhost on
106621 Init DB base_dle
106621 Query /*!40101 SET NAMES 'cp1251' */
106621 Query SELECT * FROM dle_users where name='*****' and password='*****'
106382 Quit
.....
106695 Query SELECT id, autor, dle_post.date AS newsdate, dle_post.date AS date, short_story AS story, dle_post.xfields AS xfields, title, descr, keywords, category, alt_name, comm_num AS comm_in_news, allow_comm, rating, news_read, flag, '' AS output_comms FROM dle_post WHERE dle_post.approve = '1' AND dle_post.date < '2009-08-05 19:44:01' AND dle_post.access = '' AND (short_story LIKE '%wm%6.5%' OR full_story LIKE '%wm%6.5%' OR dle_post.xfields LIKE '%wm%6.5%' OR title LIKE '%wm%6.5%') ORDER BY date desc LIMIT 0,16
090805 19:44:02 106368 Quit
106696 Connect base@localhost on
106696 Init DB base_dle
106696 Query /*!40101 SET NAMES 'cp1251' */
106696 Query SELECT * FROM dle_users where name='*****' and password='*****'
106696 Query SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags FROM dle_post where id = '11124'
106409 Quit
106696 Query INSERT INTO dle_views (news_id) VALUES ('11124')
106696 Query SELECT * FROM dle_thanks
WHERE user_name = '*****' and id_post = '11124'
106696 Query SELECT * FROM dle_thanks
WHERE id_post = '11124' ORDER by id ASC
106696 Query SELECT id, name, onserver, dcount FROM dle_files WHERE news_id = '11124'
106696 Query SELECT dle_comments.id, post_id, dle_comments.user_id, date, autor as gast_name, dle_comments.email as gast_email, text, ip, is_register, name, dle_users.email, news_num, comm_num, user_group, reg_date, signature, foto, fullname, land, icq, xfields FROM dle_comments LEFT JOIN dle_users ON dle_comments.user_id=dle_users.user_id WHERE dle_comments.post_id = '11124' ORDER BY date DESC LIMIT 0,30
106614 Quit
106697 Connect base@localhost on
.....
В mysql-slow_queries этих запросов нет. Если убивать процессы вручную через phpMyAdmin, не помогает. Если перезагрузить в сервисах MySQL, сервер возвращается в нормальный режим.
Загрузка сервера в этот момент минимальна (load averages меньше 1).
Раньше такого не было, никаких изменений в настройках сервера или ПО последнее время не было. Такие аномалии проходят не постоянно, но могут быть несколько раз в день.
Есть идеи что это может быть или хотя бы как искать?
Неактивен
Честно говоря, не вижу в этих процессах ничего плохого — они в состоянии Sleep, т.е. ничего
не делают. Если dle не держит постоянные соединения, это говорит о том, что соединение разорвалось,
но серверу MySQL не пришел пакет RST (что в свою очередь свидетельствует о сетевых проблемах).
Если dle действительно не держит постоянные соединения, то Вы можете обрубать такие «висящие»
соединения со стороны сервера, установив переменные wait_timeout = 10. При этом сервер будет
убивать все соединения, которые не присылают запросы в течение 10 секунд.
Ну и, конечно, можно поднять max_connections так, чтобы обслуживать большее количество соединений.
Неактивен
тогда такой вопрос: если запрос будет выполняться более 10 секунд и соединение разорвется принудительно, может ли это привести к повреждению таблицы?
посмотрел в лог slow_queries, там есть запросы более 20 секунд, но все запросы только SELECT, я так понимаю они повредить таблицу не могут?
выставил пока wait_timeout = 30 секунд, запросы отваливаются, но все равно собираются. получается на сайте есть торможение из-за забираемой апачем памяти но уже без критических ошибок. а как можно попытаться найти причину, а не бороться с последствиями?
Отредактированно akucher (07.08.2009 11:29:37)
Неактивен
Таблички просто так не бьются. Они могут побиться, если закончится место, или,
например, вы убьете демона MySQL девяткой.
Что касается поиска причины — это задачка куда более сложная. Скорее всего,
апач почему-то не отпускает соединения (попробуйте натравить lsof на его
экземпляры, посмотрите, действительно ли он держит соединения). Почему —
сложный вопрос. Попробуйте отказаться от апача в пользу веб-сервера, который
лучше обрабатывает запросы (например, lighttpd).
Неактивен
Страниц: 1