Архитектура сервера базы данных. Структуры памяти. Системная глобальная область. Кэш буферов базы данных (Database Buffer Cache). Буфер оперативного журнала (Redo Log Buffer), страница 4

Рисунок 5 Архитектура сервера Oracle

Конфигурации сервера Oracle

Сервер Oracle может иметь различные конфигурации взаимодействия процессов пользователя и серверных процессов:

·  Процесс пользователя и серверный процесс могут быть объединены в один пользовательский процесс, если они запущены на одном компьютере. При такой конфигурации один и тот же процесс исполняет код приложения и код сервера. В среде «клиент-сервер» процессы пользователя и серверные процессы всегда разделены.

·  Выделенный серверный процесс. Для каждого пользовательского процесса создается собственный выделенный серверный процесс, обслуживающий его запросы. Процесс пользователя и серверный процесс могут запускаться на разных компьютерах, чтобы использовать преимущества архитектуры «клиент-сервер».

·  Многопотоковый сервер. Конфигурация многопотокового сервера позволяет одному серверному процессу обслуживать одновременно несколько пользовательских процессов. В конфигурации многопотокового сервера процесс пользователь может потребовать выделенного серверного процесса при необходимости.

Выделенный сервер

Если не используется конфигурация многопотокового сервера, или процесс пользователя запрашивает выделенный сервер, для каждого пользовательского процесса создается собственный выделенный серверный процесс, обслуживающий его запросы.

Рассмотрим пример обработки SQL-запроса, поступившего от клиента, выделенным сервером.

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

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

3.  Пользователь выполняет SQL-команду, например, обновляет строку в таблице.

4.  Выделенный серверный процесс получает запрос

  • Если в разделяемом пуле содержится разделяемая область SQL для такого SQL-утверждения, серверный процесс использует существующую разделяемую область SQL для выполнения клиентского запроса
  • Если разделяемый пул не содержит разделяемую область SQL для такого SQL-утверждения, в разделяемом пуле выделяется новая разделяемая область SQL для этого запроса.
  • И в том, и в другом случае создается частная область SQL в PGA сеанса, и выделенный серверный процесс проверяет привилегии пользователя на требуемые данные.
  • Серверный процесс извлекает блоки данных из файлов данных, или использует блоки данных, если они уже хранятся в кэше буферов базы данных в SGA.
  • Серверный процесс выполняет SQL-команду, изменяя данные, хранящиеся в SGA. Измененные данные записываются на диск, когда процесс записи в базу данных (DBWR) определит, что необходимо зафиксировать изменения. Процесс записи в журнал (LGWR) фиксирует транзакцию в файле журнала, если от пользователя поступил запрос на подтверждение транзакции.

5.  Если требование было успешно выполнено, сервер отправляет сообщение пользователю, или сообщение об ошибке в противном случае.

Многопотоковый сервер

Многопотоковый сервер позволяет одному серверному процессу обслуживать одновременно несколько процессов пользователя. Многопотоковый сервер используется для обслуживания большого числа параллельно работающих пользователей или программ (не менее 200), которые одновременно осуществляют доступ к базе данных. Конфигурация многопотокового сервера в этом случае имеет ряд преимуществ:

·  Уменьшается количество процессов, выполняющихся для экземпляра

·  Увеличивается число пользователей, одновременно работающих с экземпляром

·  Уменьшается число бездействующих процессов

·  Уменьшается используемая память и накладные расходы при поддержке каждого процесса за счет уменьшения памяти, необходимой для хранения информации о состоянии процесса.

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

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

Для обслуживания многопотокового сервера необходимы дополнительные процессы:

·  Процесс прослушивания (Listener) соединяет процесс пользователя с процессом диспетчера или выделенным серверным процессом в том случае, если процесс пользователя просит выделенный серверный процесс, или разделяемый серверный процесс не может быть выделен (например, в том случае, если количество сеансов, использующих разделяемые серверные процессы, превысило максимальное значение, заданное в файле параметров).

 Каждый диспетчерский процесс при запуске сообщает процессу прослушивания адрес, по которому он ожидает запросов от процессов пользователей. Когда процесс пользователя пытается соединиться с экземпляром, процесс прослушивания определяет, может ли он назначить диспетчера для данного пользовательского процесса, и возвращает адрес диспетчер с наименьшей загрузкой процессу пользователя. Если диспетчерский (или выделенный серверный) процесс назначен процессу пользователя, пользовательский процесс напрямую соединяется с выделенным для него процессом.

·  Процесс диспетчер (Dnnn) принимает запросы от процессов пользователя и помещает их в очередь запросов, которая расположена в SGA и является единой очередью для всех диспетчеров. Результаты выполнения запроса помещаются в очередь ответов того диспетчера, который это запрос принял от пользовательского процесса.

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

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

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