Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
вообщем говоря, мой код для работы с базой пользетсья класом базаданных, а в нутри него зашито использоание одного постоянного соединения. тем не менее почему-то открываеться ооочень много. даю нагрузку на сервер, вижу что одновременно выполняеться пхп процесов не более 150. тем не менее в базе видно что число процесов постоянно растёт с пхп-сервера, и заканчиваеться тем что срабатывает лимит на число подключений к базе(лимит базы) и я не понимаю, почему не используються соединения из пулу, почему он новые создаёт??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2014, 18:38 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
У ней внутре неонка (С) мсье путает соединение php и соединение mysql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2014, 18:44 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
ScareCrow, нет не путаю.... каждый процес открывает одно подключение к базе, смысл постаяных подключений, чтобы не закрывать соеденение после процесса, и новый процес сможет использовать открытое ранее сервер загружен, но одновремено не боллее 150 процессов, тоесть реально активно используемых соединений тоже не более 150, остальные в пуле ... и похоже новые пхп процесы таки открывают новые соединения вместо использования из пула, так как в базе число соединений растёт пока мускл не падает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2014, 18:58 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
авторнет не путаю.... как скажете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2014, 19:01 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
ScareCrow, ладно... скажи как ты думаешь... но проблема остаёться...база падает изза растущего числа соединений с вебсервера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2014, 19:09 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
alex564657498765453а в нутри него зашито использоание одного постоянного соединения. значит криво зашито ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 05:55 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
r ualex564657498765453а в нутри него зашито использоание одного постоянного соединения. значит криво зашито а если несолько последовательных тестов, и то соединения ростут, то держаться на уровне 60 при одновременных 30 процесах на сервере??? тут проблема имено в системе а не в коде. этот код давно работал, и вот начались проблемы, при том что не менялись настройки...тоесть подозвреваю что нагрузка изменилась, и это както повлияло, всё остальное статично уже более квартала... работы шли в базе данных, она не на веб сервере. там с хранимками работали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 11:21 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
alex564657498765453r uпропущено... значит криво зашито а если несолько последовательных тестов, и то соединения ростут, то держаться на уровне 60 при одновременных 30 процесах на сервере??? ну значит по 2 соединения на процесс... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 11:35 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, вы даже не рассказали, что за соединения у вас - pdo::mysql, mysqli, или вообще древний mysql_connect ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 11:42 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
?alex564657498765453, вы даже не рассказали, что за соединения у вас - pdo::mysql, mysqli, или вообще древний mysql_connect точно, у меня mysqli по принципу дорисовывария р: перед именем хоста. и как уже писал ситуация сама меняеться, то нормально, то соединения создаються новые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 12:18 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
Надо смотреть что показывает show precesslist в Mysql в это время. что за запросы выполняется на конекте в это время и какая его судьба. может там блокировки полнейшие. А вообще, при грамотном подходе с открытие/закрытием конектов - такого быть не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 17:01 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
Electric200Надо смотреть что показывает show precesslist в Mysql в это время. что за запросы выполняется на конекте в это время и какая его судьба. может там блокировки полнейшие. А вообще, при грамотном подходе с открытие/закрытием конектов - такого быть не должно. Знаю что не должно. итак. код получения соединения Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ибо пока что везде используеться только одна дефолтная база данных. метод инит, он в конфиге ищет под именем $name масив подключения(хост,юзер, пасворд,база) нащот блокировок и прочего....вообще не использую тоесть скл запросы у меня вида(при моём тесте идёт загрузка данных в систему==в базу) поэтому запросы(и профайлинг класа датабейс показывает это же) будут гдето такие на каждый запрос к серверу (веб) во время теста) Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. вот приблизительно такой код. тоесть будет вставка, считывание вставленой строки - ибо есть поля по умолчанию, и в базе может быть логика в тригере вставки. некоторые поля меняем потом, добавляем детей мультивставкой меняем статус и всё...если ошибка, вместо замены статуса будет удаление по айди. ЧТО ПОКАЗЫВАЕТ PROCESSLIST показывает кучу соединений, малая часть из них(гдето 25% от числа процесов пхп запущеных выполняют какойто запрос и вышеперечисленых. остальные ...плин, как назло счас работает, число процесов не растёт... вообщем по памяти, инфо и состояние НУЛЛ а вот комманд не помню точно, либо sleep, либо wait. вроде всётаки спит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 18:02 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
авторpublic static function instance($name = null) { if ($name ===null) $name = 'default'; ты сделал мой день ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 23:27 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
alex564657498765453и я не понимаю, почему не используються соединения из пулу, почему он новые создаёт??? mysql это не oracle. создание соединения - сравнительно легкая операция. просто закрывайте все и не мучайтесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2014, 13:44 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
netwind, я профайлингом мерял, время конектов при новых, и постоянных. новые - чтото типа 30-50мс, постоянные 120-250мс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2014, 16:41 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, ну вот я и говорю : новые соединения быстрее чем ынтырпразно-постоянные ) ошиблись, наверное ? Если сервер физический один, вероятно довольно быстро все эти коннекты будут работать. Кроме того еще нужно обратить внимание на thread_cache_size - он должен быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2014, 16:54 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
1. Как у вас используется PHP? FPM,CGI,CLI,ModApache? от этого зависит толк постоянных соединений. Вы там писали о "процессах PHP" , как вы их смотрите? как вы понимаете это понятие? 2. О каком "пуле" идет речь? как вы узнает сколько процессов в "пуле" ? 3. Как подключается в PHP? PDO,MySQLLI,mysql - просто? Т.е какой драйвер. 4. Используются ли какая то ORM? 5. Какой статус в show processlist в Mysql (кроме sleep и waiteng) в момент увеличения процессов? Или они просто все слипяться ? Вы просто где то почитали описание "постоянных" соединение и не вникли в нюансы. А интуиция подсказывает, что проблема в самих запросах и данных в БД. Соответственно старые процессы не успевают завершится как появляются новые. При этом, если раньше все работало. Настройки БД изменились, какой то размер кеша урезали и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 19:23 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
Electric2001. Как у вас используется PHP? FPM,CGI,CLI,ModApache? от этого зависит толк постоянных соединений. Вы там писали о "процессах PHP" , как вы их смотрите? как вы понимаете это понятие? 2. О каком "пуле" идет речь? как вы узнает сколько процессов в "пуле" ? 3. Как подключается в PHP? PDO,MySQLLI,mysql - просто? Т.е какой драйвер. 4. Используются ли какая то ORM? 5. Какой статус в show processlist в Mysql (кроме sleep и waiteng) в момент увеличения процессов? Или они просто все слипяться ? Вы просто где то почитали описание "постоянных" соединение и не вникли в нюансы. А интуиция подсказывает, что проблема в самих запросах и данных в БД. Соответственно старые процессы не успевают завершится как появляются новые. При этом, если раньше все работало. Настройки БД изменились, какой то размер кеша урезали и все. Описываю. 1)nginx + php-fpm php процесс, я имел ввиду следующее, любое обращение на веб сервер, пораждает выполнение кода - вот это я и назвал процессом. ХОЧУ уточнить. я правильно понимаю как фпм работает есть мастер процес, который слушает порт/сокет . при получении входящего запроса, он если надо создаёт воркера, если свободный есть, то ему поручает это обрабатывать. каждый воркер обрабатывает одновременно только один запрос, и того получиться что каждый запуск кода пхп для обработки запроса, действительно равно одному процесу??? КАК я смотрю количество. дело в том что во время теста файлы забрасываються в систему, и при обработке такого запроса, в базе сразу делаеться вставка строки (типо резервирование уникального хеша файла... потом идёт шифрование , сохранение на кластере, и потом у этой записи идёт апдейт. между вставкой и апдейтом, на этот файл висит лок - номер файла и ноды которая его принимает в даный момент. вот по этим локам я и смотрел сколько на кжадой ноде процесов. ибо между запросом и появлением лока, время панты... между снятием лока, идёт фактически сразу ексит... и процесу остаёться сбросить логи если есть в файл.- тоесть время тоже пантовое. 2) mysqli - ему можно задать просто имя хоста 122.233.222.111, а можно с добавлением p: когда соеденение не закрываеться а помещаеться в пул(близко к тексту из документации пхп). Вот про этот пул я говорил. Я НЕ узнавал количество соединений в пуле. я смотрел в базе данных процеслист. и видел как (см 1) при работающих пхп скриптах на каждой ноде до 50(реально 50 одна, где нода и база один сервер и с ним сеть быстрая...на остальные изза того что они в зимбабве или типа того, там по 10 процесов на ноду) тоесть при реально используемых соединениях с базой ну пускай 200, количество процессов в базе растёт пока не достигаеться лимит на 1200 и ноды получают от базы ошибку - про достижения лимита подключений. хотя иногда база до 1200 не доходит - падает. в логах мускла причина не просматриваеться почему упала. 3)mysqli 4)ОRM используеться сяз (сам я забабахал) - посути это код который оборачивает масив(поля записи) и при команде сейв, если запись не из базы, сделает инсерт, иначе апдейт при селекте - метод_выборки с параметром скл строка либо по примари кею - тогда число обратиться к базе, и результат получит fetch_object - сразу ввиде обьекта ОРМ есть потомки, они реализуют специфику записи - шифрование. хеширование, бинарное хранение. ну например для юзера - при уходе поля пароль в базу он хешируеться, при чтении из базы - обнуляеться(тоесть читаем пустую строку) или для шифрованого значения, при записи в базу такого значения, оно шифруеться, при чтении поля обьекта - оно автоматически дешифруеться. тоесть ничего сложенее просто квери с инсертом апдейтом делете селект не выполняеться - нету локов, нету смены системных переменых базы, нето добавочных опций для соединения. 5)процесы, ну с десяток будет выполняющих какойто елементарный запрос из ОРМ моего - селект, делете, апдейт, инсерт - остальные слиип. ЗЫ вообще это проблема приходящая, тоесть само подобное возникнет, само пропадёт. я счас на локалхосте занимаюсь програмированием баззы для билинга, на сервере никто ничего не меняет...просто играюсь тестами нагрузки... редко но трудность возникает - начинает расти число соединений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 11:32 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
alex5646574987654533)mysqli пул работает сравнительно просто : в рамках каждого процесса-обработчика php создается соединение и в каждом процесс пул собственный. не зависимо от способа запуска, хоть apache, хоть php-fpm. не нужно тут ничего усложнять. теперь, если вы постоянно указываете один и тот же логин-пароль-хост, то используется уже открытое ранее соединение с mysql при обработке прошлого скрипта. вот и все. это значит, что нужно подумать где в этой схеме возникает сбой. может быть слишком потомки php-fpm слишком часто мрут ? или же вы каким-то хитрым образом имена юзеров меняете ? И, разумеется, один из самых простых вариантов - не использовать постоянные соединения. Тем более что вы "просто играетесь тестами нагрузки." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 13:49 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
играюсь не всмысле в понарошку, а всмысле когда лень делать основную работу. так сказать наслаждаюсь своим творением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 14:02 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, на 99% все статейки насчет "хайололода" такими людьми и пишутся. Может лучше алгоколизм или какое-то активное хобби? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 15:00 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
netwindalex564657498765453, на 99% все статейки насчет "хайололода" такими людьми и пишутся. Может лучше алгоколизм или какое-то активное хобби? не совсем понял про какие статейки? я вообще статейки не читаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 15:35 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, ну вы же не могли слово highload сами придумать ? Да еще и php-fpm зачем-то влепили. Думается, без статеек тут не обошлось. а где статейки, там и преждевременная оптимизация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 18:20 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
netwind, не не угадал. nginx + php-fpm это дань. тоесть то что мне дано свыше. а слово хайлоуд я взял, потому что ЗАДРАЛИ им на собеседованиях. там везде пишут стронг экспирианс ин хайлоуд. правда никто мне так и не ответил на собеседовании - чем их код хайлоуд отличаеться от не хайлоуд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 18:55 |
|
||
|
постоянные соединения с Mysql
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, авторкод получения соединения авторclass Database { protected static $_connections = array(); public static function instance($name = null) { if ($name ===null) $name = 'default'; if (empty(self::$_connections[$name])) { self::$_connections[$name] = self::_init($name); } return self::$_connections[$name]; } } //for query Database::instanse()->query($sql); ибо пока что везде используеться только одна дефолтная база данных. метод инит, он в конфиге ищет под именем $name масив подключения(хост,юзер, пасворд,база) нащот блокировок и прочего....вообще не использую тоесть скл запросы у меня вида(при моём тесте идёт загрузка данных в систему==в базу) поэтому запросы(и профайлинг класа датабейс показывает это же) будут гдето такие на каждый запрос к серверу (веб) во время теста) автор//insert line Database::instance()->query('insert into table(field_list) values(value_list)'); $id = Database::last_insert_id(); $target = ORM_Target::factory($id); //->>>> select * from targets where idtarget = $id //something calculation without database $target->f1 = 100; $target->f2=200; $target->save(); //->>>> update targets set f1=100,f2=200 where idtarget = $target->id $childrens = ORM_Insert_multi('childs',array('f1','f2','f3'); $childrens->add($target->id,'petya',200); $childrens->add($target->id,'vasya',300); ..... $childrens->execute(); //->>> insert into childrens(f1,f2,f3) values ($target->id, 'petya',200), //($target->id, 'vasya',300), .....; $target->status = 1; $target->save(); exit(); вот приблизительно такой код. Если не ошибаюсь, то использование статической функции класса подразумевает под собой использование метода самого класса (при чем каждый раз нового) без создания объекта. То-есть при каждом запросе вида авторDatabase::instance()->query('insert into table(field_list) values(value_list)'); вы создаете подключение по новой. Лучше организовать подключение через симпл патерн (как собственно и принято) и тем самым устранить допущеные вами ошибки. P.S. Может кто-то тоже такие ошибки допускает и потом ищет как побороться с ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 11:02 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38813936&tid=1462235]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 398ms |

| 0 / 0 |
