
Oracle - MS Server / OracleМП / лекции оракл / lect6_m2_ipovs_ipovs_SUBDOracle_231000.62
.docЛекция 6. Фоновые процессы Oracle.
Для того чтобы СУБД Oracle могла работать с сотней запросов пользователей одновременно, просматривать тысячи (или даже миллионы) записей в таблицах данных, обрабатывать данные с максимально высокой производительностью и надежностью, вся эта работа распределяется между множеством программ, которые работают независимо одна от другой. Эти программы называются фоновыми процессами Oracle. Чтобы понять причины появления тех или иных проблем в работе системы и избежать их, необходимо разобраться в назначении и особенностях выполнения фоновых процессов.
Ниже перечислены существующие фоновые процессы Oracle, часть из которых упоминалась ранее [1]:
-
PMON и SMON - управление процессами и восстановление базы при ее открытии;
-
DBWR - запись в файлы данных измененных блоков;
-
LGWR - запись в файлы оперативного журнала информации из буфера журнала транзакций;
-
ARCH - архивирование оперативного журнала транзакций;
-
СКРТ - обработка контрольных точек;
-
RECO - для распределенных БД восстанавливает незавершенные транзакции;
-
SPNn - обновление снимков;
-
Pnnn - обслуживание процессов параллельных запросов;
-
LCKn - управление параллельными подключениями к экземпляру.
Кроме того, существуют процессы User и Server, выполняющие обработку транзакций конечного пользователя к БД, и процессы Parallel Query, которые ответственны за обработку параллельных запросов. Эти процессы не квалифицируются как фоновые, но они играют значительную роль в функционировании системы.
Процессы SMON и PMON
Если пользователь выключает свой компьютер, не уведомив об этом Oracle, или, например, произошла какая-либо неполадка в сети или в аппаратуре, непосредственно не затрагивающая базу данных, но, тем не менее, приводящая к аварийному разрыву подключения, сервер Oracle должен соответствующим образом отреагировать на подобную ситуацию.
Именно этим - автоматическим решением возникающих в БД проблем - заняты процессы SMON и PMON. PMON (Process Monitor - мониторинг процессов) выполняет автоматическую «уборку» после внезапно прекратившихся или завершившихся аварийно процессов. Эта «уборка» включает удаление сеанса, закрепленного за прекратившимся процессом, блокировок, которые были им установлены, незавершенных транзакций, освобождение ресурсов ГСО, выделенных этому процессу. Процесс PMON также следит за процессами сервера и диспетчера, автоматически перезапускает их в случае остановки.
Достаточно важную роль играет и процесс SMON. После запуска БД процесс SMON (System Monitor - мониторинг системы) выполняет автоматическое восстановление экземпляра. Если при последнем выключении БД что-либо не завершено, SMON автоматически запускает незавершенные операции. Кроме того, SMON следит за сегментами БД, фиксирует освобождение пространства во временных сегментах и автоматически объединяет их в непрерывные свободные блоки в файлах данных. Необходимо заметить, что если для табличного пространства параметр pctiincrease равен 0, то объединение происходить не будет, поэтому, если объединение должно выполняться, то необходимо установить значение pctincrease хотя бы равным 1.
Фоновые процессы SMON и PMON обязательны для функционирования БД; если они не запущены, система функционировать не будет.
Процесс DBWR
Процесс DBWR (Database Writer - запись в базу данных) отвечает за перенос измененных блоков, занесенных в dirty-список, из кэш-буфера в файлы данных. Вместо того, чтобы записывать каждый блок на диск сразу же после внесения изменений, процесс DBWR ждет, пока не будет выполнено одно из следующих условий: обнаружена контрольная точка; количество элементов в dirty-списке достигло заданной величины; количество использованных буферов достигло величины, заданной параметром _DB__LARGE_DIRTY__QUEUE из файла init.ora; истек заданный для процесса DBWR интервал времени (3 сек). После этого процесс DBWR просматривает dirty-снисок и все отмеченные в нем блоки переписывает на диск. Такая организация групповой переписи модифицированных данных позволяет уменьшить влияние скоростных характеристик дисковой памяти на производительность системы.
Настройка фонового процесса DBWR происходит так же, как и настройка всех процессов - в ходе работы с системой. Можно оставить значения параметров, предлагаемые по умолчанию, если БД малого и среднего объема. Если один процесс не будет успевать за обновлением данных, можно запустить несколько процессов DBWR. Для этого в файле init.ora нужно установить соответствующее значение параметра _DBWR_TRACING, который по умолчанию равен 1. В большинстве случаев необходимость в дополнительных процессах DBWR может возникнуть, если сервер Oracle работает в операционной системе, которая не поддерживает асинхронный ввод/вывод. Тогда рекомендуется запустить столько процессов DBWR, сколько физических дисков используется для хранения файлов данных. Другое возможное значение соответствуеn количеству файлов данных в БД. Следует отметить, что модификация параметров с символом подчеркивания перед наименованием может привести к отрицательному результату, и поэтому, прежде чем изменять значения таких параметров, рекомендуется снять с БД резервную копию.
Для управления доступом к блокам памяти в кэш-буфере данных также используется механизм защелок. Защелка списка LRU управляет обменом буферов в кэше. В очень активных серверах с множеством процессоров между защелками могут возникнуть «гонки». Если возникла такая ситуация, следует установить для параметра _DB_BLOCK_LRU_LATCHES значение, равное количеству защелок. Это количество не должно превышать более, чем вдвое, количество процессоров. По умолчанию количество защелок устанавливается равным количеству процессоров в системе.
Еще один параметр, влияющий на режим работы процесса DBWR - DB_BLOCK_CHECKSUM. Это логический параметр, установка которого приводит к тому, что каждая перезапись блока данных сопровождается вычислением контрольной суммы. При считывании в дальнейшем такого блока автоматически подсчитывается новая контрольная сумма и сравнивается с ранее вычисленной. Несовпадение контрольных сумм (подсчитанной при чтении и хранящейся вместе с блоком данных) свидетельствует о сбое. Такая процедура чтения/записи данных помогает отыскать причины сбоев в системе. Не рекомендуется оставлять режим вычисления контрольных сумм постоянно включенным, поскольку это негативно сказывается на производительности системы.
Процесс LGWR
Процесс LGWR (Log Writer - «писатель» журнала) - четвертый и последний фоновый процесс, запуск которого обязателен для работы СУБД Oracle. Этот процесс отвечает за перезапись информации из буфера журнала транзакций, который находится в ГСО, в файлы оперативного журнала. Эта запись выполняется при следующих условиях: транзакция принимается; истекает время ожидания, заданное для процесса LGWR; буфер журнала транзакций заполняется на треть; процесс DBWR завершает перезапись данных из кэш-буфера после обнаружения контрольной точки. Процесс LGWR также обрабатывает завершения транзакций для нескольких пользователей одновременно, когда один или несколько пользователей запрашивают завершение, в то время как LGWR еще не закончил перезапись буфера.
Oracle не считает транзакцию выполненной до тех пор, пока процесс LGWR не перезапишет данные о ней из буфера журнала транзакций в файл. Сообщение о выполнении транзакции передается процессу сервера не после изменения данных, а после успешного завершения записи в файл журнала транзакций.
В работе процесса LGWR редко происходят какие-либо сбои, поэтому практически все возможные настройки в работе с журналом транзакций влияют не столько на сам процесс, сколько на распределение памяти буфера. Но если запущен процесс СКРТ и процесс LGWR осуществляет обработку контрольных точек, то процессы LGWR и DBWR вынуждены тратить время на перезапись. С другой стороны, большая часть контрольных точек уменьшает время на восстановление работоспособности системы в случае возможного сбоя и уменьшает время обработки каждой отдельной контрольной точки.
Существует несколько параметров настройки интервала следования контрольных точек, и задавая их значение, необходимо учитывать указанные выше факторы.
Непосредственно изменить интервал следования контрольных точек могут два параметра - LOG_CHECKPOINT_INTERVAL и LOG_CHECKPOINT_TIMEOUT. При установке значения параметра LOG_CHECKPOINT_INTERVAL контрольная точка генерируется при условии, что указанное количество блоков операционной системы (именно ОС, а не блоков Oracle) записывается в журнал транзакций. С другой стороны, при установке значения параметра LOG_CHECKPOINT_TIMEOUT контрольная точка генерируется при условии, что истек указанный (в секундах) интервал времени [1].
Использовать эти параметры надо осторожно, тщательно подбирая их значения. Если для настройки используется параметр LOG_CHECKPOINT_INTERVAL, то указанное количество блоков ОС должно соотноситься с размером группы журнала транзакций. Когда эта группа заполнится, будет сгенерирована контрольная точка. Например, если значение параметра LOG_CHECKPOINT_INTERVAL установлено равным 2,5 Мбайт, а размер группы журнала равен 3 Мбайт, контрольная точка сгенерируется в следующих случаях: когда в журнал записаны 2,5 Мбайт данных и когда заполнена группа журнала (после следующих 0,5 Мбайт). Получается, что вторая точка будет сгенерирована практически сразу после первой.
Частоту генерации контрольных точек можно также регулировать соответствующим подбором размера группы журнала. Если установлен такой размер группы, который заполняется в течение часа, то и условие для генерации контрольной точки будет выполняться примерно раз в час. Если же уменьшить размер группы, например, так, что она будет заполняться в течение пяти минут, то и контрольные точки начнут генерироваться очень часто, и на их обработку будет затрачено довольно много времени.
Кроме вышеупомянутых параметров, связанных с выполнением контрольных точек, используется еще и логический параметр LOG_CHECKPOINTS_TO_ALERT. Если он установлен, то при каждом появлении контрольной точки будет проставляться соответствующая отметка в файле регистрации alert.log. В дальнейшем этот файл сможет оказать существенную помощь при анализе динамики генерации контрольных точек.
Процесс СКРТ
Из описания процесса LGWR понятно, что процесс СКРТ - это дополнительный фоновый процесс, который отвечает за обработку контрольных точек. Обычно такая обработка, обеспечивающая обновление файлов данных и заголовков контрольных файлов, выполняется процессом LGWR. Таким образом, СКРТ снижает нагрузку на процесс LGWR.
Процесс ARCH
Процесс ARCH (Archiver - архиватор) отвечает за копирование полностью заполненного оперативного файла журнала транзакций в архивные файлы журналов транзакций. Для запуска процесса ARCH необходимо, чтобы база данных работала в режиме архивирования журналов транзакций.
Для того чтобы процесс ARCH запускался автоматически после открытия БД, необходимо параметру LOG_ARCHIVE_START в файле init.ora присвоить значение TRUE. Сама по себе установка режима архивирования файлов журналов транзакций не запускает автоматически процесс ARCH. Поэтому, если нет соответствующей установки параметра LOG_ARCHIVE_START, система «зависнет» после заполнения оперативных файлов журналов и будет ждать, пока процесс ARCH не будет запущен вручную.
Во время перезаписи в архив никакой другой процесс не может получить доступ к журналу. Таким образом, на время копирования в архив система должна находиться в состоянии ожидания. Если по какой-либо причине процесс ARCH не может завершить запись, он будет ждать устранения причины, мешающей ему закончить операцию.
Процесс RECO
Процесс RECO отвечает за восстановление незавершенных транзакций в распределенной системе БД. Он запускается автоматически, если система сконфигурирована под распределенные транзакции. Когда возникает подозрительная транзакция, процесс RECO выполняет свои функции практически без вмешательства администратора БД. Процесс пытается установить связь с удаленной БД и после установления связи решить возникшую проблему.
Процесс SNPn
Этот процесс занимается автоматическим обновлением снимков (snapshot) БД и запускает процедуры в соответствии с расписанием, зафиксированным в пакете DBMS_JOB. Параметр JOB_QUEUE_PROCESSES в файле init.ora задает количество запускаемых процессов SNPn, а параметр _JOB_QUEUE__INTER-VAL - определяет длительность временного интервала, в течение которого процесс «засыпает», прежде чем выполнить задание.
Процесс LCKn
В среде с параллельным обслуживанием к одной БД может обращаться множество экземпляров Oracle. Именно процесс LCKn (Locks - блокировки) отвечает за координацию блокировок, устанавливаемых разными экземплярами. Если режим параллельного обслуживания не установлен в системе, необходимость в процессе LCKn отпадает.
Процесс Рnnn
Процессы параллельных запросов получили в системе наименование Pnnn. Сервер Oracle запускает и останавливает процессы Pnnn в зависимости от активности работы с БД и настройки опций параллельных запросов. Эти процессы принимают участие в формировании индексов, таблиц и запросов. Количество запускаемых процессов задается двумя параметрами: PARALLEL_MIN_SERVERS и PARALLEL_MAX_SERVERS, определяющими, соответственно, минимальное и максимальное количество запускаемых процессов.
Процессы сервера и пользователя
Процесс сервера анализирует и выполняет переданные ему операторы SQL и возвращает результат процессу пользователя. Кроме того, процесс сервера считывает блоки из файлов данных и размещает их в кэш-буфере.
Приложения и утилиты связываются с СУБД посредством процессов пользователя. Каждый процесс пользователя, в свою очередь, подключается к процессу сервера, который может быть либо жестко связан с одним процессом пользователя (тогда процесс сервера называется выделенным (dedicated)), либо распределяться между многими (разделяемый процесс сервера (shared)).
Каждому процессу пользователя выделяется область памяти, которая называется глобальной областью процесса (ГОП, или PGA - Process Global Area). Содержимое ГОП зависит от режима подключения процесса пользователя к процессу сервера. В случае выделенного процесса сервера в ГОП размещается информация о текущем сеансе работы пользователя, стек и информация о состоянии курсора. Информация о текущем сеансе, в свою очередь, включает данные, необходимые для системы обеспечения безопасности, и данные об используемых ресурсах. Стек содержит локальные переменные. Область состояния курсора включает в себя информацию о положении курсора, возвращаемые строки и возвращаемый код курсора.
Если же процесс пользователя связан с разделяемым процессом сервера, то информация о текущем сеансе и текущем состоянии курсора хранится в ГСО. Хотя это и не очень существенно в смысле требований к памяти, нo некоторое увеличение размера ГСО в этом случае все же потребуется.
Процессы-диспетчеры
Для того чтобы использовать разделяемые серверы, нужно сконфигурировать многопоточный сервер Multi-Threaded Server (MTS). При использовании разделяемых процессов в системе должен существовать как минимум один процесс-диспетчер. Количество процессов-диспетчеров зависит от потребностей операционной среды и задается рядом параметров в файле инициализации.
Диспетчер передает запросы пользователей в очередь ГСО и возвращает ответы сервера соответствующему процессу пользователя [1].
Список литературы
-
Илюшечкин В.М. - Учебно-методические разработки для самостоятельной работы студентов, изучающих дисциплину «СУБД Oracle»
-
All-Oracle [Электронный ресурс]. – URL:http://all-oracle.ru/content/view/?part=1&id=68
-
Oracle для профессионалов [Электронный ресурс]. – URL: http://citforum.ru/database/oracle/kyte