![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
UsamaBrainLaden |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 10.11.2008 Репутация: нет Всего: нет |
При каждом новом соединении к серверу БД, в диспетчере задач появляется новый процесс postgres.exe, размер занимаемой памяти впечатляет (11 мегабайт), причем если соединений будет больше, то число занимаемой памяти каждого из дублируемых процессов уменьшается (это хорошо). Вопрос в том нормально ли это, почему PostgreSQL для каждого нового соединения выделяет отдельный процесс,а не поток? Дело в том, что когда число соединений переваливает за 50, то клиенты начинают каскадно отваливаться, с сообщением о том, что сервер разорвал соединение по причине, которая очевидна: слишком много процессов и памяти занято на сервере и че-то там с SQL запросами.
PS: Я работаю с Windows 2003 Server SP(какой-то, но не первый) и PostgreSQL 8.2.9, причем пробовал соединяться из pgAdmin и Delphi (Zeos и ADO) - та же песня!. На сервере 512 МБ ОП, конфиг постгреса практически не правил (разве что подключение с любого IP и число конкурирующих соединений). |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 1 Всего: 31 |
Это просто факт. Postgresql работает на процессах. Такое вот у них решение.
Да не очень хорошо с точки зрения производительности - когда постоянно цепляются и отваливаются клиенты, но в общем более надежное и простое решение, чем потоки. По поводу того, что у вас начинают отваливаться клиенты - проверьте параметр max_connections скорее всего вы превзошли это ограничение.. Если не секрет - откуда столько клиентов ? По поводу того, сколько памяти расходуется..Все современные ОС - умные, и разделяют (по возможности) память между процессами. Т.е. если у вас 10 процессов-клонов используют один и тот же код то сегменты памяти содержащие этот код - у них будут общие. Однако данные у каждого процесс будут свои... А вот что показывает диспечер задач - это вопрос.. |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
конфиг по умолчанию там для мощного сервера, по умолчанию Postgres выделяет много памяти для работы, для ключей и для всего остального (смотря какой тип базы), можно конфиг оптимизировать под себя себя... |
|||
|
||||
UsamaBrainLaden |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 10.11.2008 Репутация: нет Всего: нет |
В этом случае я бы увидел сообщение что не могу приконнектиться из-за превышения лимита конкурентных подключений. Хотя этот предел может быть достигнут, когда клиент отсоединяется некорректно, то процесс висит и отвалится только по таймауту (накапливается число мёртвых процессов). Я эксперементировал с числом одновременных подключений, просто запускал у себя клиентские программы (штук 70) и после чего все процессы чудом позавершались,а на клиентах вываливались ошибки, что сервер оборвал соединение (при этом max_connections у меня стоял ваще 1000). Просто обидно что клиент висит в основном в режиме IDLE, то есть он нужную табличку стянул и в ней сидит и запросы посылает редко (у меня трёхзвенная архитектура), а процесс при этом висит. В отличие от Apache, у которого PHP страничка работает с БД и при этом процесс только моргнёт разок и всё (появится в диспетчере и исчезнет сразу). |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 1 Всего: 31 |
Вообщем должно быть довольно безразлично на процессах или потоках у вас работает сервер. Вы не должны это замечать.
Если отваливаются клиенты - ищите проблему конфигурации (я думаю Postgresql достаточно зрелая база, что бы переварить 70 клиентов..) Хотя - проверьте ка - может у вас в ОС есть ограничение на число процессов.. P.S. Вообще плохо, что у вас столько соединений открыто. Что за Apllication (Web) сервер ? Должна быть возможность повторного использования соединений. Или хотя бы корректного закрытия когда они не нужны. |
|||
|
||||
Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: нет Всего: 9 |
По мне так наоборот, дефолтный конфиг заточен под очень ограниченные системы в плане памяти. В любом мануале это написано, и рекомендуется перенастраивать конф в обязательном порядке, разрешать испльзовать больше памяти. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PostgreSQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |