SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 17.05.2011 23:52:06

valetrammstein
Участник
Зарегистрирован: 15.01.2011
Сообщений: 19

Тормоза на связке php-mysql

Debian 6.
PHP 5.3.6-6~dotdeb.1 with Suhosin-Patch (cli) (built: Apr  3 2011 16:36:05)
mysql  Ver 14.14 Distrib 5.1.57, for debian-linux-gnu (x86_64) using readline 6.1

Проблема в том, что страницы сайта грузятся более 20 сек - срабатывает какая-то задержка на связке php-fpm->mysql.

Нагрузку давал siege'ом.

Результаты отдачи статического файла:
Transactions:                7824 hits
Availability:               87.28 %
Elapsed time:              252.56 secs
Data transferred:          105.57 MB
Response time:                2.38 secs
Transaction rate:           30.98 trans/sec
Throughput:                0.42 MB/sec
Concurrency:               73.60
Successful transactions:        7824
Failed transactions:            1140
Longest transaction:           24.63
Shortest transaction:            0.13

Response time - это среднее время загрузки страницы. Тут 2 сек.
То есть с nginx все нормально.

Вот результаты отдачи файла <?php phpinfo(); ?>
Transactions:                7821 hits
Availability:               86.56 %
Elapsed time:              255.03 secs
Data transferred:           64.80 MB
Response time:                1.98 secs
Transaction rate:           30.67 trans/sec
Throughput:                0.25 MB/sec
Concurrency:               60.87
Successful transactions:        7821
Failed transactions:            1214
Longest transaction:           24.15
Shortest transaction:            0.09

Response time: 1.98 secs - нормальный показатель. То есть сам php, если не обращается к Mysql работает нормально.

А вот такой ужас при тестировании реальных страниц сайта, то есть тех, где срабатывает связка php-mysql:
Transactions:                1626 hits
Availability:               76.55 %
Elapsed time:              299.95 secs
Data transferred:           16.96 MB
Response time:               25.59 secs
Transaction rate:            5.42 trans/sec
Throughput:                0.06 MB/sec
Concurrency:              138.74
Successful transactions:        1626
Failed transactions:             498
Longest transaction:           32.63
Shortest transaction:           15.62

24 сек ждать загрузки страницы это конечно кошмар. Но что интересно, проблема не в нагрузке mysql на систему - по top'у все ок - по нулям, mysql не жрет ресурсов вообще. То есть где-то срабатывает задержка в самой связке php-mysql.

Подскажите пожалуйста из-за чего такое может происходить?

Отредактированно valetrammstein (17.05.2011 23:54:32)

Неактивен

 

#2 19.05.2011 02:21:40

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

Re: Тормоза на связке php-mysql

А failed transactions Вас не смущают?

Начните со --skip-name-resolve и выставления прав по IP (а еще лучше —
соединяйтесь через unix socket с базой). Если это таймаут, то чаще всего
из-за плохо настроенного DNS.

Неактивен

 

#3 20.05.2011 16:43:39

valetrammstein
Участник
Зарегистрирован: 15.01.2011
Сообщений: 19

Re: Тормоза на связке php-mysql

paulus написал:

А failed transactions Вас не смущают?

Начните со --skip-name-resolve и выставления прав по IP (а еще лучше —
соединяйтесь через unix socket с базой). Если это таймаут, то чаще всего
из-за плохо настроенного DNS.

Добавил в секцию [mysqld] --skip-name-resolve, перезапусти mysql - не помогло.
>>>из-за плохо настроенного DNS
а что еще бывает плохо? Не знаю, днс работает, если проверять nslookup domen.ru 127.0.0.1
Как проверить хорошо ли работает?

>>>выставления прав по IP
это как?

>>>а еще лучше —
соединяйтесь через unix socket с базой
можно кокретней, куда что вписать.

У меня nginx и php-fpm через unix socket работают, соотвественно
в /etc/php5/fpm/pool.d/www.conf
;listen = 127.0.0.1:9000
listen = /tmp/php-fpm.sock
в /etc/nginx/sites-enabled/default
fastcgi_pass   unix:/tmp/php-fpm.sock;

я так понимаю настройки надо менять в /etc/mysql/my.cnf
в этом месте
[mysqld]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

Но что туда вписать, чтобы работало через unix socket?

Неактивен

 

#4 21.05.2011 19:11:24

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

Re: Тормоза на связке php-mysql

Это PHP у Вас с nginx общается через socket. А PHP с MySQL как?
Что написано в mysql_connect()?

Неактивен

 

#5 21.05.2011 20:20:20

valetrammstein
Участник
Зарегистрирован: 15.01.2011
Сообщений: 19

Re: Тормоза на связке php-mysql

paulus написал:

Это PHP у Вас с nginx общается через socket. А PHP с MySQL как?
Что написано в mysql_connect()?

Я так понял эта строка в /etc/php5/fpm/php.ini
; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
; http://php.net/mysql.default-socket
mysql.default_socket =

Но что тут вписать?

Неактивен

 

#6 21.05.2011 23:15:02

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

Re: Тормоза на связке php-mysql

/var/run/mysqld/mysqld.sock

Неактивен

 

#7 23.05.2011 16:12:46

valetrammstein
Участник
Зарегистрирован: 15.01.2011
Сообщений: 19

Re: Тормоза на связке php-mysql

Удалось локализировать проблему.
Создал тестовую БД, тестовый php-скрипт с буквально несколькими командами (соединиться, выбрать данные, закрыть) и вместо ожидаемых 16 сек увидел 0.01 сек кажется.

В общем в конце концов оказалось, что проблема вообще в скриптах движка, а именно один php-файл коннектился к удаленному серверу через @file_get_contents, что давало такую задержку.

Спасибо за помощь, все уже работает.

Неактивен

 

Board footer

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