Структуры памяти Oracle
SQL> SELECT component, current_size, min_size, max_size
FROM v$sga_dynamic_components;
SQL> SELECT name, value
FROM v$pgastat
WHERE name in ('maximum PGA allocated','total PGA allocated');
Oracle использует часть выделенной ему памяти для хранения как кода программ,
так и данных, что позволяет существенно ускорить обработку, чем если бы
пришлось постоянно извлекать данные с диска. Эти структуры памяти позволяют
Oracle разделять один и тот же исполняемый код между несколькими
пользователями, не тратя времени на подготовительные процедуры перед
вызовом каждой порции кода.
Сервер Oracle не всегда пишет данные на диск непосредственно. Он пишет
изменения базы данных в область памяти, и когда наступает подходящий момент,
сбрасывает их на диск. Поскольку обращение к памяти происходит во много раз
быстрее, чем к физическим дискам (оно измеряется наносекундами, в то время
как обращение к диску – миллесекундами). Oracle может преодолеть ограничения
ввода-вывода дисковой системы. Чем больше работы выполняет ваша база
данных в памяти по сравнению с обращениями к дискам, тем быстрее она
реагирует на запросы. Конечно, по мере сокращения ввода-вывода загрузка
процессора также сокращается, что повышает эффективность системы.
Понятие о главной памяти
Все компьютеры используют память, которая в действительности состоит из
иерархии различных уровней памяти. В сердце иерархии находится главная
память (main memory), которая содержит все исполняемые инструкции и
манипуляции данными. Вся главная память представляет собой память
произвольного доступа (RAM), что означает возможность чтения байта из любого
ее участка за одно и то же время. Обычно вы имеете доступ к данным в главной
памяти за 10-100 наносекунд.
Важная часть информации Oracle, хранимой в выделенной ему RAM, составляет
программный код, выполняющийся в данный момент или выполнявшийся только
что. Если новый пользовательский процесс нуждается в том же коде, он доступен
ему в памяти в скомпилированном виде, что значительно ускоряет время его
выполнения. Области памяти также содержат информацию о том, какие
пользователи заблокировали определенную таблицу, тем самым повышая
эффективность коммуникаций между разными сеансами. Но наиболее важно,
наверное, то, что области памяти помогают в обработке данных, находящихся в
постоянном дисковом хранилище. Oracle не проводит непосредственных
изменений в данных на диске: данные всегда читаются с диска, удерживаются в
памяти и изменяются там перед тем, как быть переданными обратно на диск.
Для обозначения этих участков памяти принято использовать термин буферы.
Буферы памяти – это постраничные области памяти, в которые Oracle передает
содержимое дисковых блоков. Если база данных нужно прочесть (выбрать) или
обновит данные, она копирует соответствующие блоки с диска в буферы памяти.
После проведения необходимых изменений, Oracle переносит содержимое
буферов памяти на диск.
Oracle использует два типа структур памяти – общую и относящуюся к процессу.
Системная глобальная область (system global area – SGA) – это часть общей
памяти, которую разделяют между собой все серверные процесс (включая
фоновые). Специфичная для процессов часть памяти известна как программная
глобальная область (program global area - PGA), или принадлежащая процессу
память (process-private memory). В последующих разделах мы рассмотрим эти два
компонента памяти Oracle более подробно.
Do'stlaringiz bilan baham: |