Почему Perl делает систему очень медленной, когда я установил более 4000 подключений к базе данных? - PullRequest
0 голосов
/ 19 октября 2010

Я писал код для определения скорости моей базы данных, используя скрипт Perl.

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

Я использую модуль DBI, в моей системе 4 ГБ ОЗУ, где Postgres 8.3 работает на другом компьютере.

Ответы [ 4 ]

5 голосов
/ 19 октября 2010

Я не совсем понимаю, хотите ли вы, чтобы вы сказали: а) открыть 4000 соединений, разветвить, открыть еще 4000 соединений и т. Д. Или б) форкнуть 4000 раз и открыть одно соединение от каждого процесса, но 4000 баз данных Соединения или 4000 процессов - это довольно серьезное потребление ресурсов в любом случае. Я совсем не удивлен, что это замедляет работу вашей системы - я ожидаю, что это будет конечным результатом независимо от используемого языка.

Чего вы на самом деле пытаетесь достичь, создавая все эти процессы и / или соединения? Вероятно, есть лучший способ сделать это, который не будет настолько ресурсоемким.

4 голосов
/ 19 октября 2010

Я видел pgpool , который используется в производственных системах, где количество соединений postgres не может быть ограничено чем-то разумным. Возможно, вы захотите использовать это самостоятельно, чтобы не допустить плохого дизайна приложений вашими разработчиками.

По сути, pgpool действует как прокси для postgres. Он мультиплексирует запросы по множеству соединений с гораздо меньшим (и управляемым) числом к ​​внутренней базе данных.

2 голосов
/ 19 октября 2010

Это относительность, говорящая о множестве связей, которые нужно иметь одновременно, но не неслыханно. Сколько памяти у вас на сервере базы данных? Каждое соединение требует ресурсов, если у вас нет настройки сервера базы данных для обработки этого объема соединений, оно будет медленным независимо от того, какой язык вы используете для подключения.

Простая аналогия была бы, если бы у вас была Toyota Prius (старые времена, я бы сказал, Ford Pinto), тянувший полуприцеп весом в 80 000 фунтов (типичный допустимый вес во многих штатах). Это сожжет этот маленький Prius в одно мгновение, как вы видите. Чтобы сделать это правильно, вам нужно купить себе большой риг и привязать его к трейлеру, чтобы переместить такое количество веса.

1 голос
/ 19 октября 2010

Не обращая внимания на мудрость выполнения 4000 разветвлений подключения, вы должны работать над проблемами производительности с чем-то, похожим на Devel :: NYTProf .

Я бы альтернативно настроил постоянных работников в gearman и сделал бымои запросы клиента gearman.Постоянство и ваши запланированные вилки по запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...