прямой доступ к SGA / x$ таблицы
Фактически, когда мы будем читать данные из SGA, то мы при этом будем читать из x$ таблиц. Поглядим на них подробнее.
На самом деле, это области памяти, которые расположены в SGA, если точнее, то в её fixed area (SGA состоит из четырёх частей -- fixed area, buffer cache, shared pool и log buffer).
Их названия на первый взгляд выглядят как абракадабра, но определённая логика в них есть.
Можно выразиться, что Oracle ядро состоит из нескольких уровней. Для каждого уровня есть свои области памяти (которые видны нам как x$ таблицы), содержащие информацию о статусах и статистике работы функций этого уровня. Так вот, первые две буквы в названии x$ таблицы указывают, к какому уровню она принадлежит.
Вот список уровней ядра:
- Compilation layer (KK). Уровень отвечает за компиляцию pl/sql объектов и генерацию explain plan на основе данных из словаря.
- Execution layer (KX). Выполняет откомпилированный код из предыдущего уровня и делает привязку SQL и PL/SQL объектов. Также отвечает за рекурсивные вызовы в словарь.
- Distributed Transaction layer (K2). Обеспечивает двухфазные коммиты в распределённых транзакциях.
- Security layer (KZ). Управляет ролями и системными привилегиями. Участвует на этапе компиляции и выполнения.
- Query layer (KQ). Кэширует данные из словаря. Compilation (KK) и Security (KZ) уровни пользуются данными этого уровня во время компиляции.
- Access layer (KA). Отвечает за доступ к сегментам и предоставляет информацию вышеуказанным уровням.
- Data layer (KD). Отвечает за запись и чтение физических данных в/из сегменов. Настраивает сегменты для хранения таблиц или индексов.
- Transaction layer (KT). Работает с rollback сегментами. Заведует freelist'ами, выделением ITL (Intrested Transaction List) внутри блоков данных, row-level блокировками во время транзакций и генерацией undo.
- Cache layer (KC). В тесном контакте с операционной системой управляет buffer cache'ем и shared memory. Также отвечает за создание redo-информации и запись redolog файлов.
- Service layer (KS). Работает для других уровней. Отслеживает инициализационные параметры для сессий и системы в целом. Latches и locks в случае одно-instance'ного экземпляра -- тоже его забота. Также отвечает за wait events и системную статистику.
- Lock Management layer (KJ). Управляет блокировками и распределением ресурсов при работе Oracle в кластере (RAC).
- Generic layer (KG).