SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.08.2009 12:18:10

akucher
Участник
Зарегистрирован: 06.08.2009
Сообщений: 2

Иногда MySQL уходит в ступор и собираются процессы Sleep

Обычно сервер (выделенный, Apache 2.2.11, FreeBSD 6.3, MySQL 5.0.75, MyISAM, порядка 20 тыс хостов, кеширование - вкл.) работает хорошо, но иногда MySQL уходит в ступор.

Начинают собираться процессы. В phpMyAdmin это выглядит так:

http://i.piccy.info/i4/8b/29/9d192e4dd207a2bc6e5ae851773c.jpeg

когда собирается слишком много процессов, соответственно появляется ошибка 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).
Раньше такого не было, никаких изменений в настройках сервера или ПО последнее время не было. Такие аномалии проходят не постоянно, но могут быть несколько раз в день.

Есть идеи что это может быть или хотя бы как искать?

Неактивен

 

#2 06.08.2009 14:29:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Иногда MySQL уходит в ступор и собираются процессы Sleep

Честно говоря, не вижу в этих процессах ничего плохого — они в состоянии Sleep, т.е. ничего
не делают. Если dle не держит постоянные соединения, это говорит о том, что соединение разорвалось,
но серверу MySQL не пришел пакет RST (что в свою очередь свидетельствует о сетевых проблемах).

Если dle действительно не держит постоянные соединения, то Вы можете обрубать такие «висящие»
соединения со стороны сервера, установив переменные wait_timeout = 10. При этом сервер будет
убивать все соединения, которые не присылают запросы в течение 10 секунд.

Ну и, конечно, можно поднять max_connections так, чтобы обслуживать большее количество соединений.

Неактивен

 

#3 07.08.2009 10:41:51

akucher
Участник
Зарегистрирован: 06.08.2009
Сообщений: 2

Re: Иногда MySQL уходит в ступор и собираются процессы Sleep

тогда такой вопрос: если запрос будет выполняться более 10 секунд и соединение разорвется принудительно, может ли это привести к повреждению таблицы?
посмотрел в лог slow_queries, там есть запросы более 20 секунд, но все запросы только SELECT, я так понимаю они повредить таблицу не могут?

выставил пока wait_timeout = 30 секунд, запросы отваливаются, но все равно собираются. получается на сайте есть торможение из-за забираемой апачем памяти но уже без критических ошибок. а как можно попытаться найти причину, а не бороться с последствиями?

Отредактированно akucher (07.08.2009 11:29:37)

Неактивен

 

#4 07.08.2009 12:41:23

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Иногда MySQL уходит в ступор и собираются процессы Sleep

Таблички просто так не бьются. Они могут побиться, если закончится место, или,
например, вы убьете демона MySQL девяткой.

Что касается поиска причины — это задачка куда более сложная. Скорее всего,
апач почему-то не отпускает соединения (попробуйте натравить  lsof на его
экземпляры, посмотрите, действительно ли он держит соединения). Почему —
сложный вопрос. Попробуйте отказаться от апача в пользу веб-сервера, который
лучше обрабатывает запросы (например, lighttpd).

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson