Фиксированная область SGA
Фиксированная область SGA — это область системной глобальной памяти (System Global Area, SGA) в СУБД Oracle Database, которая имеет фиксированный размер, определяемый при старте экземпляра базы данных, и не подлежит автоматическому изменению в процессе работы. В отличие от динамических компонентов SGA (например, буферного кэша или разделяемого пула), фиксированная область SGA не может быть увеличена или уменьшена без перезапуска экземпляра. Она занимает строго заданный объём памяти, выделяемый из операционной системы, и служит для хранения критически важных структур данных, необходимых для функционирования ядра СУБД.
История и назначение
Концепция SGA была введена в ранних версиях Oracle Database (начиная с Oracle 7) как единое адресное пространство, разделяемое между всеми процессами экземпляра. Фиксированная область SGA выделена как часть этого пространства, предназначенная для хранения структур, которые не могут быть динамически перераспределены без нарушения работы системы. С развитием Oracle Database (особенно с Oracle 9i, где появилась автоматическая настройка памяти, и Oracle 10g, где был введён Automatic Shared Memory Management), фиксированная область SGA осталась неизменяемой в процессе работы, в то время как другие компоненты SGA стали динамическими.
Основное назначение фиксированной области SGA — обеспечение быстрого доступа к служебным данным, необходимым для управления процессами, сессиями, транзакциями и блокировками. Эти структуры не зависят от объёма данных в базе и не масштабируются под нагрузку, поэтому их размер жёстко фиксирован.
Структура и компоненты
Фиксированная область SGA состоит из нескольких ключевых структур, каждая из которых выполняет строго определённые функции. Точный состав и размеры зависят от версии Oracle Database и параметров конфигурации, но в общем случае включают:
- Фиксированная область SGA (Fixed SGA) — собственно, сама фиксированная область, которая содержит указатели на другие компоненты SGA, а также служебные переменные ядра. Её размер обычно составляет от нескольких килобайт до нескольких мегабайт.
- Блок управления процессами (Process Control Block, PCB) — хранит информацию о каждом процессе, подключённом к экземпляру (например, идентификатор процесса, состояние, используемые ресурсы).
- Блок управления сессиями (Session Control Block, SCB) — содержит данные о каждой активной сессии (пользователь, привилегии, параметры сессии).
- Блок управления транзакциями (Transaction Control Block, TCB) — хранит информацию о незавершённых транзакциях (состояние, блокировки, точки сохранения).
- Блок управления блокировками (Lock Control Block, LCB) — управляет блокировками объектов базы данных (таблиц, строк, страниц).
- Другие служебные структуры — например, информация о контрольных точках, журналах повторного выполнения (redo logs), статистика работы системы.
Все эти структуры размещаются в фиксированной области SGA и не могут быть перемещены в динамическую часть SGA. Их размер рассчитывается на основе параметров инициализации, таких как PROCESSES, SESSIONS, TRANSACTIONS и LOCKS, которые задаются в файле параметров (spfile или pfile) до запуска экземпляра.
Размер и настройка
Размер фиксированной области SGA определяется автоматически при старте экземпляра на основе значений параметров инициализации. Он не может быть изменён без перезапуска экземпляра. В Oracle Database размер фиксированной области SGA обычно составляет от 1 до 10 МБ, но может быть больше при большом количестве процессов или сессий. Например, при значении параметра PROCESSES = 1000 размер фиксированной области SGA может достигать 20–30 МБ.
Для просмотра текущего размера фиксированной области SGA можно выполнить SQL-запрос:
``sql SELECT * FROM V$SGAINFO WHERE NAME = 'Fixed SGA Size'; ``
Или использовать команду:
``sql SHOW SGA; ``
В выводе SHOW SGA фиксированная область SGA отображается как строка Fixed Size.
Настройка фиксированной области SGA осуществляется косвенно через параметры инициализации:
PROCESSES— максимальное количество одновременно работающих процессов (включая фоновые и пользовательские). Увеличение этого параметра увеличивает размер фиксированной области SGA.SESSIONS— максимальное количество одновременных сессий. Обычно автоматически рассчитывается как1.1 * PROCESSES + 5.TRANSACTIONS— максимальное количество одновременных транзакций. Обычно рассчитывается как1.1 * SESSIONS.LOCKS— максимальное количество одновременных блокировок. Обычно рассчитывается как20 * TRANSACTIONS.
Изменение этих параметров требует перезапуска экземпляра. Рекомендуется устанавливать их с запасом, чтобы избежать ошибок при росте нагрузки, но не превышать ресурсы операционной системы.
Влияние на производительность
Фиксированная область SGA оказывает незначительное влияние на общую производительность базы данных, так как её размер мал по сравнению с другими компонентами SGA (например, буферным кэшем или разделяемым пулом). Однако её переполнение может привести к критическим ошибкам, таким как:
- ORA-00018: maximum number of sessions exceeded — превышение максимального количества сессий.
- ORA-00020: maximum number of processes exceeded — превышение максимального количества процессов.
- ORA-00040: maximum number of transactions exceeded — превышение максимального количества транзакций.
Эти ошибки возникают, когда фиксированная область SGA не может выделить память для новых структур управления. Для их устранения необходимо увеличить соответствующие параметры и перезапустить экземпляр.
В отличие от динамических компонентов SGA, фиксированная область SGA не подвержена фрагментации и не требует автоматической настройки. Её размер остаётся постоянным на протяжении всего времени работы экземпляра.
Сравнение с другими областями SGA
SGA в Oracle Database включает несколько компонентов, которые различаются по способу управления памятью:
- Фиксированная область SGA — фиксированный размер, не изменяется в процессе работы.
- Буферный кэш (Database Buffer Cache) — динамический, может изменяться автоматически или вручную.
- Разделяемый пул (Shared Pool) — динамический, включает библиотечный кэш и словарь данных.
- Журнальный буфер (Redo Log Buffer) — фиксированный или динамический в зависимости от версии.
- Large Pool — динамический, используется для резервного копирования и параллельных операций.
- Java Pool — динамический, для выполнения Java-кода.
- Streams Pool — динамический, для Oracle Streams.
Фиксированная область SGA — единственный компонент, который не может быть изменён без перезапуска экземпляра. Это делает её критически важной для планирования ресурсов: при проектировании базы данных необходимо заранее оценить максимальное количество процессов и сессий, чтобы избежать ошибок в будущем.
Примеры конфигурации
В Oracle Database 19c при стандартных настройках (например, PROCESSES = 150, SESSIONS = 170, TRANSACTIONS = 187) размер фиксированной области SGA составляет около 2–3 МБ. При увеличении PROCESSES до 1000 размер может вырасти до 20–30 МБ.
Для просмотра текущих значений параметров, влияющих на фиксированную область SGA, можно выполнить:
``sql SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME IN ('processes', 'sessions', 'transactions', 'locks'); ``
Источники
- Oracle Database Administrator’s Guide, 19c (2023)
- Oracle Database Reference, 19c (2023)
- Oracle Database Concepts, 19c (2023)
- Документация Oracle Corporation: «Understanding SGA Components» (2022)
- Статья «Fixed SGA Size in Oracle Database» на сайте Oracle Support (Doc ID 137053.1)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →