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

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

Когда разбирается новое SQL-выражение, Oracle выделяет память в разделяемом пуле для хранения разобранного выражения. Если лимит разделяемого пула исчерпан, Oracle освобождает области памяти, используя механизм LRU (least recently used), до тех пор, пока не освободится достаточное количество памяти для хранения нового разобранного SQL-утверждения.

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

Частная область SQL имеет переходящую область и область выполнения:

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

·  Область выполнения содержит информацию, используемую во время выполнения SQL-выражения.

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

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

Программные модули PL/SQL обрабатываются точно так же, как и отдельные SQL-выражения. Oracle выделяет разделяемые области для хранения разобранных, откомпилированных модулей и частные области SQL для хранения значений, специфичных для данного сеанса (локальные, глобальные и пакетные переменные). Если несколько пользователей выполняют один и тот же программный модуль, одна разделяемая область SQL используется всеми пользователями, и, в то же время, каждый пользователь поддерживает свою собственную частную область SQL, содержащую переменные, специфичные для сеанса.

Кэш словаря данных

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

§  Имена всех таблиц и представлений базы данных.

§  Имена и типы данных столбцов в таблицах базы данных.

§  Привилегии всех пользователей.

Кэш словаря содержит информацию из словаря данных, которая необходима для лексического анализа SQL выражения. Кэш словаря данных называют, также, кэшем строк (row cache), т.к. данные в кэше словаря хранятся в виде строк, а не в виде буферов, содержащих целые блоки данных.

Рисунок 2 Разделяемый пул

Программная глобальная область

Программная глобальная область (PGA) – неразделяемая область памяти, в которой содержатся данные и управляющая информация для серверного или фонового процесса. PGA выделяется сервером Oracle при запуске серверного или фонового процесса и доступна только для этого процесса. Чтение и запись в эту область памяти разрешены только для того приложения, за которым закреплен данный серверный процесс.

Содержимое программной области зависит от того, закреплен ли серверный процесс за одним приложением (выделенный процесс) или разделяется несколькими приложениями (разделяемый процесс).  Обычно в программной глобальной области размещаются следующие структуры (Рисунок 3):

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

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

Рисунок 3 Программная глобальная область

Процессы

Приложения и утилиты связываются с СУБД посредством процессов пользователя. Каждый процесс пользователя подключается к серверному процессу, который может быть выделен для одного процесса пользователя, или распределен между многими.

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

Серверные и фоновые процессы называют, также, процессами Oracle, т.к. они выполняются сервером Oracle.

Фоновые процессы

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

§  Системный монитор SMON.

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

§  Освобождает пространство временных сегментов.

§  Объединяет смежные свободные области в файлах данных.

§  Монитор процессов PMON

§  Освобождает ресурсы после аварийного завершения соединения.

§  Осуществляет откат незавершенных транзакций.

§  Освобождает блокировки завершившегося процесса.

§  Освобождает ресурсы SGA, распределенные аварийно завершившемуся процессу.

§  Перезапускает аварийно завершившиеся диспетчерские и серверные процессы.