Использование памяти

Обсуждение вопросов по администрированию СУБД Progress OpenEdge
Аватара пользователя
dmikai
Старожил
Сообщения: 517
Зарегистрирован: 20 сен 2006, 23:19
Откуда: Рига, Латвия
Контактная информация:

Использование памяти

Сообщение dmikai » 19 май 2017, 11:48

Доброго Вам дня, Форумчане

Столкнулся с такой проблемой:
Есть две сессии Progress (Linux, CHUI). Одна подсоединяется через shared-memory, а другая по сервису.
В каждой сесии выполняем один и тот же запрос по абсолютно любой, но большой таблице.
В итоге сессия с использованием подключения по сервису память не скушала, а вот у второй
наблюдается аппетит - и сразу прирост в 130М, и далее не отпускает.

Можно ли этому дать объяснение?

OpenEdge Release 11.6.2.002, Linux 64bit

Аватара пользователя
George
Старожил
Сообщения: 2871
Зарегистрирован: 12 май 2004, 17:03
Откуда: Питер

Re: Использование памяти

Сообщение George » 22 май 2017, 19:04

Я не изучал этот вопрос и потому далее идут только мои предположения.

Скорее всего самообслуживающийся клиент при первом обращении к базе подключает к своему адресному пространству (a.k.a. к "памяти") некоторые разделяемые библиотеки. Эта память является разделяемой, т.е. даже если запущена тысяча самообслуживающихся клиентских сессий и адресное пространство каждой сессии после первого обращения к таблице прирастает на 150 MB, то на самом деле свободная память в системе не уменьшится ни на 150 GB (= 1000 * 150 MB), ни даже на 150 MB. Можно стартовать одну сессию, которая напрямую подключается к базе. Еще раз проверить как изменилось адресное пространство этой сессии после обращения к базе. Затем, используя другое логическое имя, подключится к той же базе еще раз. Предполагаю, что запрос, использующий новое логическое имя базы, больше не увеличит "память" сессии поскольку к этой сессии уже подключены нужные разделяемые библиотеки. А можно второй раз подключиться к действительно другой базе. Полагаю, что результат от этого не изменится.

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