powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / постоянные соединения с Mysql
26 сообщений из 26, показаны все 2 страниц
постоянные соединения с Mysql
    #38635939
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообщем говоря, мой код для работы с базой пользетсья класом базаданных, а в нутри него зашито использоание одного постоянного соединения.

тем не менее почему-то открываеться ооочень много.

даю нагрузку на сервер, вижу что одновременно выполняеться пхп процесов не более 150. тем не менее в базе видно что число процесов постоянно растёт с пхп-сервера, и заканчиваеться тем что срабатывает лимит на число подключений к базе(лимит базы)

и я не понимаю, почему не используються соединения из пулу, почему он новые создаёт???
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38635943
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У ней внутре неонка (С)

мсье путает соединение php и соединение mysql
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38635953
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

нет не путаю.... каждый процес открывает одно подключение к базе, смысл постаяных подключений, чтобы не закрывать соеденение после процесса, и новый процес сможет использовать открытое ранее

сервер загружен, но одновремено не боллее 150 процессов, тоесть реально активно используемых соединений тоже не более 150, остальные в пуле ... и похоже новые пхп процесы таки открывают новые соединения вместо использования из пула, так как в базе число соединений растёт пока мускл не падает.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38635957
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторнет не путаю....
как скажете.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38635962
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

ладно... скажи как ты думаешь... но проблема остаёться...база падает изза растущего числа соединений с вебсервера
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38636146
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453а в нутри него зашито использоание одного постоянного соединения.
значит криво зашито
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38636418
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r ualex564657498765453а в нутри него зашито использоание одного постоянного соединения.
значит криво зашито

а если несолько последовательных тестов, и то соединения ростут, то держаться на уровне 60 при одновременных 30 процесах на сервере???

тут проблема имено в системе а не в коде. этот код давно работал, и вот начались проблемы, при том что не менялись настройки...тоесть подозвреваю что нагрузка изменилась, и это както повлияло, всё остальное статично уже более квартала... работы шли в базе данных, она не на веб сервере. там с хранимками работали.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38636459
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
alex564657498765453r uпропущено...

значит криво зашито

а если несолько последовательных тестов, и то соединения ростут, то держаться на уровне 60 при одновременных 30 процесах на сервере???
ну значит по 2 соединения на процесс...
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38636471
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
alex564657498765453, вы даже не рассказали, что за соединения у вас - pdo::mysql, mysqli, или вообще древний mysql_connect
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38636564
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?alex564657498765453, вы даже не рассказали, что за соединения у вас - pdo::mysql, mysqli, или вообще древний mysql_connect

точно, у меня mysqli по принципу дорисовывария р: перед именем хоста.

и как уже писал ситуация сама меняеться, то нормально, то соединения создаються новые.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38637052
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо смотреть что показывает show precesslist в Mysql в это время. что за запросы выполняется на конекте в это время и какая его судьба. может там блокировки полнейшие.
А вообще, при грамотном подходе с открытие/закрытием конектов - такого быть не должно.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38637111
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
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 масив подключения(хост,юзер, пасворд,база)

нащот блокировок и прочего....вообще не использую
тоесть скл запросы у меня вида(при моём тесте идёт загрузка данных в систему==в базу)

поэтому запросы(и профайлинг класа датабейс показывает это же)
будут гдето такие на каждый запрос к серверу (веб) во время теста)
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
//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();



вот приблизительно такой код.

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

некоторые поля меняем потом, добавляем детей мультивставкой
меняем статус и всё...если ошибка, вместо замены статуса будет удаление по айди.

ЧТО ПОКАЗЫВАЕТ PROCESSLIST

показывает кучу соединений, малая часть из них(гдето 25% от числа процесов пхп запущеных выполняют какойто запрос и вышеперечисленых. остальные ...плин, как назло счас работает, число процесов не растёт... вообщем по памяти, инфо и состояние НУЛЛ
а вот комманд не помню точно, либо sleep, либо wait. вроде всётаки спит.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38637283
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторpublic static function instance($name = null)
{
if ($name ===null)
$name = 'default';


ты сделал мой день
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38647542
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453и я не понимаю, почему не используються соединения из пулу, почему он новые создаёт???
mysql это не oracle. создание соединения - сравнительно легкая операция.
просто закрывайте все и не мучайтесь.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38647836
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwind,

я профайлингом мерял, время конектов при новых, и постоянных.
новые - чтото типа 30-50мс, постоянные 120-250мс
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38647851
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453, ну вот я и говорю : новые соединения быстрее чем ынтырпразно-постоянные )
ошиблись, наверное ?

Если сервер физический один, вероятно довольно быстро все эти коннекты будут работать. Кроме того еще нужно обратить внимание на thread_cache_size - он должен быть.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38649516
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Как у вас используется PHP? FPM,CGI,CLI,ModApache? от этого зависит толк постоянных соединений. Вы там писали о "процессах PHP" , как вы их смотрите? как вы понимаете это понятие?
2. О каком "пуле" идет речь? как вы узнает сколько процессов в "пуле" ?
3. Как подключается в PHP? PDO,MySQLLI,mysql - просто? Т.е какой драйвер.
4. Используются ли какая то ORM?
5. Какой статус в show processlist в Mysql (кроме sleep и waiteng) в момент увеличения процессов? Или они просто все слипяться ?


Вы просто где то почитали описание "постоянных" соединение и не вникли в нюансы. А интуиция подсказывает, что проблема в самих запросах и данных в БД. Соответственно старые процессы не успевают завершится как появляются новые. При этом, если раньше все работало. Настройки БД изменились, какой то размер кеша урезали и все.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38649956
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)процесы, ну с десяток будет выполняющих какойто елементарный запрос из ОРМ моего - селект, делете, апдейт, инсерт - остальные слиип.

ЗЫ
вообще это проблема приходящая, тоесть само подобное возникнет, само пропадёт. я счас на локалхосте занимаюсь програмированием баззы для билинга, на сервере никто ничего не меняет...просто играюсь тестами нагрузки... редко но трудность возникает - начинает расти число соединений
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38650251
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex5646574987654533)mysqli

пул работает сравнительно просто :
в рамках каждого процесса-обработчика php создается соединение и в каждом процесс пул собственный. не зависимо от способа запуска, хоть apache, хоть php-fpm. не нужно тут ничего усложнять.
теперь, если вы постоянно указываете один и тот же логин-пароль-хост, то используется уже открытое ранее соединение с mysql при обработке прошлого скрипта. вот и все.
это значит, что нужно подумать где в этой схеме возникает сбой.
может быть слишком потомки php-fpm слишком часто мрут ?
или же вы каким-то хитрым образом имена юзеров меняете ?

И, разумеется, один из самых простых вариантов - не использовать постоянные соединения. Тем более что вы "просто играетесь тестами нагрузки."
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38650278
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
играюсь не всмысле в понарошку, а всмысле когда лень делать основную работу. так сказать наслаждаюсь своим творением
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38650379
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453, на 99% все статейки насчет "хайололода" такими людьми и пишутся. Может лучше алгоколизм или какое-то активное хобби?
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38650439
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwindalex564657498765453, на 99% все статейки насчет "хайололода" такими людьми и пишутся. Может лучше алгоколизм или какое-то активное хобби?

не совсем понял про какие статейки? я вообще статейки не читаю.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38650641
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453, ну вы же не могли слово highload сами придумать ?
Да еще и php-fpm зачем-то влепили. Думается, без статеек тут не обошлось.
а где статейки, там и преждевременная оптимизация.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38650661
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwind,

не не угадал.
nginx + php-fpm это дань. тоесть то что мне дано свыше.

а слово хайлоуд я взял, потому что ЗАДРАЛИ им на собеседованиях. там везде пишут стронг экспирианс ин хайлоуд. правда никто мне так и не ответил на собеседовании - чем их код хайлоуд отличаеться от не хайлоуд.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38813936
Yaroslav22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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. Может кто-то тоже такие ошибки допускает и потом ищет как побороться с ними.
...
Рейтинг: 0 / 0
постоянные соединения с Mysql
    #38815040
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yaroslav22,
вот тут можно по подробней...я не совсем понял где новое подключение.

вас наверно смутило $_connections.
это речь идёт о разных базах.

мs при Database::intance($name) задаём имя подключения( подключения к разным базам могут быть одновременно)

$logger = Database::instance('db_for_save_logs')
$general_data = Database::instance('db_with_general_data')
$current_data = Database::instance('db_with_current_data')

и да, это будет три подключения к различным трём субд.

но если в другом месте мы ещо раз захотим взять подключение
$general_data = Database::instance('db_with_general_data')
мы уже в омём коде на участке

Код: php
1.
2.
3.
4.
if (empty(self::$_connections[$name]))
{
self::$_connections[$name] = self::_init($name);
}


self::_init() пропустим, ибо условие ложно - уже есть активное подключение с таким именем!!!


думая в данной проблеме, верна мысль одного из людей, кто сказал - одно подключение для каждого пхп-процесса(воркера)

на пхп-фпм, их может быть до 200, 4 ноды - до 800 подключений..что вообщемто вписываеться в данные.

также было заменено время перезагрузки воркера, что повысило частоту умирания - и как выше человек заметил, тоже сказываеться на числе подключений - ибо старые не разрываються мгновенно.
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / постоянные соединения с Mysql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]