SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 28.08.2008 16:59:15

Magz
Гуру
Откуда: Москва
Зарегистрирован: 18.09.2007
Сообщений: 112

Периодическое подвисание процессов

Добрый день. Периодически происходит подвисание процессов. В списке я вижу картину:
Id     User     Host     db     Command     Time     State     Info
76743    r    localhost    db_r    Sleep    231         NULL
76927    r    localhost    db_r    Sleep    190         NULL
77303    r    localhost    db_r    Sleep    111         NULL
77392    r    localhost    db_r    Sleep    93         NULL
77516    r    localhost    db_r    Sleep    68         NULL
77535    r    localhost    db_r    Sleep    62         NULL

Никак не могу найти условия, при которых это происходит. Причем, происходит периодически, но с разным периодом. Можно ли как-то понять, из-за чего это может происходить?

Неактивен

 

#2 28.08.2008 17:17:56

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

Re: Периодическое подвисание процессов

Sleep - это состояние процесса, когда он ничего не делает. Это не подвисание.

Возможно, подвисает само приложение?

Неактивен

 

#3 28.08.2008 17:21:14

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Периодическое подвисание процессов

PHP может держать открытые соединения (т.н. persistent connection). Ничего страшного в этом нет

Неактивен

 

#4 29.08.2008 11:15:32

Magz
Гуру
Откуда: Москва
Зарегистрирован: 18.09.2007
Сообщений: 112

Re: Периодическое подвисание процессов

rgbeast написал:

PHP может держать открытые соединения (т.н. persistent connection). Ничего страшного в этом нет

Пока их не много, страшного действительно ничего нет. Однако, их может накапливаться такое количество, что начинаются ошибки Too many connection, да и mysqld занимает чуть ли не 100% процессора.
persistent connection мы не используем.

Отредактированно Magz (29.08.2008 11:16:22)

Неактивен

 

#5 29.08.2008 11:42:56

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

Re: Периодическое подвисание процессов

Если это действительно старые соединения, то со стороны сервера это легко полечить
установкой параметров:
  1. max_connections - количество одновременно разрешенных соединений. На нагруженном
сервере это число может быть достаточно большим (например, 1024).
  2. wait_timeout - время (в секундах), которое сервер ждет от соединения, чтобы оно
выполнило хоть какой-нибудь запрос. Если поставить разумное число (например, 100), то
все Ваши спящие соединения будут обрубаться, когда время сна достигнет 100 секунд.

Если параметры нужно ставить глобально, то их нужно вписать в my.cnf в раздел [mysqld],
налету можно проставить командой SET GLOBAL max_connections=1024;

Неактивен

 

#6 29.08.2008 12:02:26

Magz
Гуру
Откуда: Москва
Зарегистрирован: 18.09.2007
Сообщений: 112

Re: Периодическое подвисание процессов

Спасибо, сейчас попробую.
В my.cnf нужно использовать конструкцию

set-variable = max_connections = 1024;

Или можно писать напрямую
max_connections = 1024;

Неактивен

 

#7 29.08.2008 12:10:21

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Периодическое подвисание процессов

Оба варианта допустимы.

На стороне php есть соответствующие настройки в php.ini
[MySQL]
; Allow or prevent persistent links.
mysql.allow_persistent = On

; Maximum number of persistent links.  -1 means no limit.
mysql.max_persistent = -1

Неактивен

 

Board footer

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