Как узнать размер sga oracle
В системах управления базами данных, разработанных корпорацией Oracle , системная глобальная область ( SGA ) является частью системной памяти ( RAM ), совместно используемой всеми процессами, принадлежащими одному экземпляру базы данных Oracle . SGA содержит всю информацию, необходимую для работы экземпляра.
Содержание
Составные части
В целом SGA состоит из следующего:
- буферный кеш: содержит копии блоков данных, считанных из файлов данных
- кеш словаря : содержит информацию о таблицахсловаряданных , такую как информацию об учетной записи, файле данных, сегменте, экстенте, таблице и привилегиях
- буфер журнала повторного выполнения: содержит информацию о транзакциях базы данных, как зафиксированных, так и незафиксированных, для подготовки к записи в онлайн-файлы журнала повторного выполнения
- общий пул: содержит кеш словаря или строк, кеш библиотеки, определения курсора и общий SQL.
- Пул Java: содержит информацию для синтаксического анализа операторов Java .
- большой пул: включая глобальную область пользователя (UGA))
- пул потоков: это удаленное подключение к базе данных.
Конфигурация
Начиная с Oracle Database версии 10g, автоматическое управление памятью (AMM) позволяет упрощенную и динамическую настройку SGA.
Гранулы
В СУБД Oracle сервер Oracle выделяет системную глобальную область (SGA) в единицах гранул во время запуска экземпляра. Во время запуска каждый компонент получает столько гранул, сколько требуется. Можно сказать, что SGA состоит из связанных гранул. Размер гранулы зависит от версии базы данных, а иногда и от операционной системы. В Oracle 9i и более ранних версиях он составляет 4 МБ, если размер SGA меньше 128 МБ, и 16 МБ в противном случае. Для более поздних выпусков он обычно составляет 4 МБ, если размер SGA меньше 1 ГБ, и 16 МБ в противном случае. В SGA должно быть как минимум 3 гранулы: одна для буферного кэша базы данных, одна для области общего пула и одна для буфера журнала повторного выполнения. Информацию о текущем размере гранулы можно получить в любое время, запросив динамическое представление V $ SGAINFO.
ВОПРОС:
Как увеличить память выделяемую для Oracle 10g и 11g при увеличении RAM на сервере (для Windows)?
ОТВЕТ:
(Для случая использования автоматического управления памятью, ручное управление здесь не рассматривается).
В Oracle 10g и 11g автоматическое управление памятью, используемое по умолчанию, работает по разному. В расчетах, приведенных в этой статье, это учитывается.
1) (Для Oracle 10g и 11g) Определить сколько необходимо памяти под PGA на существующем экземпляре.
Для этого нужно выполнить запрос под sys.
SELECT ROUND (PGA_TARGET_FOR_ESTIMATE / 1024 / 1024) target_mb,
PGA_TARGET_FACTOR,
ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
ESTD_OVERALLOC_COUNT
FROM V$PGA_TARGET_ADVICE;
2) (Для Oracle 10g и 11g). Определить сколько памяти в ОС мы можем использовать под экземпляр Oracle.
Помимо Oracle на сервер работают и другие процессы и они тоже потребляют память сервера. Поэтому нужно определить сколько памяти потребляется на сервере без участия Oracle. Для этого можно на работающем сервере остановить экземпляр Oracle и посмотреть потребление памяти в диспетчере задач.
Для приведенного примера: Всего на сервере 16Гб памяти RAM, используется 7,73Гб, доступно 8424Мб. Т.е. можно использовать 8424Мб. Но у процессов, которые в данный момент запущены на сервере, может увеличиться потребление памяти, тогда сервер станет интенсивно использовать файл подкачки, что резко снизит производительность, что для сервера недопустимо. Поэтому необходимо оставить запас свободной памяти, от 10% и выше. Предположим что мы оставляем 25% запаса свободной памяти. Тогда у нас остается 8424-(8424*25/100)=6318Мб.
3) Установка размеров областей памяти для Oracle
3.1) Установка размеров областей памяти для Oracle 10g (используется ASMM)
3.2) Установка размеров областей памяти для Oracle 11g (используется AMM)
В Oracle 11g с AMM в памяти выделяется одна область под все области, PGA также входит в эту одну общую область, поэтому можно использовать всю вычисленную свободную память 6318Мб (PGA вычитать не нужно). Для удобства округлим 6318Мб до 6Гб.
Обзор управления памятью
Память сервера баз данных имеет определенный размер. Поэтому пространство, доступное экземпляру базы данных Oracle, ограничено. Необходимо уделять внимание тому, как распределяется память. Когда слишком много памяти под определенную область, а в этом нет необходимости, тогда существует вероятность того, что функционирование неоптимально, так как другим областям недостаточно места.
Использование автоматического выделения памяти значительно упрощает задачу. Но даже в таком случае в целях оптимизации необходим мониторинг и может потребоваться ручное конфигурирование размеров некоторых частей памяти.
В курсе Oracle Database 10g: Администрирование I было представлено введение в вопросы настройки памяти. В этом уроке описывается, как функционирует автоматическая настройка памяти, когда производить ручную настройку, что представляет из себя программная глобальная область (Program Global Area - PGA), а также предоставляются подробные сведения о каждой структуре памяти экземпляра Oracle.
Структуры памяти Oracle
С экземпляром Oracle связаны следующие основные структуры памяти:
системная глобальная область (System Global Area - SGA); эта область совместно используется всеми серверными и фоновыми процессами.
программная глобальная область (Program Global Area - PGA); такая приватная область выделяется для каждого серверного и фонового процесса (одна область PGA для каждого процесса).
SGA - разделяемая область, содержащая данные и управляющую информацию экземпляра.
SGA содержит следующие структуры данных:
кэш буферов базы данных (database buffer cache) - используется для кэширования блоков, выбираемых из файлов данных;
журнальный буфер (redo log buffer) - содержит журнальные данные перед их записью в журнальные файлы;
разделяемый пул (shared pool) - содержит различные структуры, которые могут совместно использоваться пользователями;
большой пул (large pool) - необязательная область памяти, используемая буферами ввода-вывода большого объема при выполнении параллельных запросов, разделяемым сервером, Oracle ХА, а также определенными типами операций резервирования;
java-пул - используется при выполнении Java-кода всех сеансов и обработки данных внутри виртуальной Java-машины (Java Virtual Machine - JVM);
streams пул - используется опцией Oracle Streams;
keep пул - необязательный дополнительный пул буферов для объектов, чьи блоки должны оставаться в памяти как можно дольше;
recycle пул - для блоков, которые не должны задерживаться в памяти;
кэши буферов для блоков размера иК; кэшируют блоки данных, размер которых отличается от стандартного размера блока базы данных; используются для поддержки перемещаемых табличных пространств (transportable lablespaces).
В динамической инфраструктуре SGA размеры кэша буферов базы данных, разделяемого пула, большого пула, Streams-пула и Java-пула изменяются без остановки экземпляра. Кроме того, размеры таких структур памяти, как удерживающий кэш буферов (keep buffer cache), рециклируюший кэш буферов (recycle buffer cache), а также кэши буферов для блоков размера «К, могут быть изменены без остановки экземпляра.
Преконфигурированная база данных предварительно настроена и для нее установлены соответствующие параметры использования памяти. Однако по мере расширения использования может возникнуть необходимость изменить установки таких параметров.
Программная глобальная область (Program Global Area - PGA) - область памяти, содержащая данные и управляющую информацию для каждого серверного процесса.
Серверный процесс (server process) - это такой процесс, который обслуживает запросы по выполнению команд, поступающие от клиента. Каждому серверному процессу принадлежит своя собственная приватная область PGA, которая создается, когда запускается серверный процесс. Доступ к этой области предоставляется исключительно этому серверному процессу и все действия по чтению и записи в эту область производятся только путем вызова соответствующего кода сервера Oracle.
Размер памяти, используемой PGA, и ее содержимое зависит от того, сконфигурирован ли экземпляр в режиме разделяемого сервера.
Обычно PGA содержит следующее:
Приватная область SQL (private SQL area). В этой области находятся такие данные, как информация привязки и структуры памяти, используемые при выполнении команды. Каждый сеанс, в котором вводится команда SQL, имеет приватную область SQL.
Память сеанса (session memory) . В памяти сеанса находятся переменные сеанса и другая информация, связанная с сеансом.
Кэш буферов
Для конфигурирование кэша буферов используется параметр DB_CACHE_SIZE. Кэш буферов содержит копии блоков данных из файлов данных. Размер этих блоков равен значению параметра DB_BLOCK_SIZE. Поскольку кэш буферов является частью SGA, эти блоки могут использоваться всеми пользователями. Серверные процессы читают блоки из файлов данных в кэш буферов. Для повышения производительности серверный процесс иногда читает несколько блоков за одну операцию чтения. Процесс DBWn записывает данные из кэша буферов в файлы данных. Для повышения производительности процесс DBWn записывает несколько блоков за одну операцию записи.
В произвольный момент времени кэш буферов может содержать несколько копий одного и того же блока базы данных. Только одна из них является текущей, остальные конструируются на основе информации сегментов отмены (construct read-consistent copies from past image information - CR block). Они обеспечивают целостные чтения данных.
Для мониторинга использования буферов используется список наиболее давно использовавшихся (least recently used -LRU) буферов. В этом списке буферы сортируются на основе учета того, как давно и как часто они использовались. Поэтому в одном конце этого списка находятся буферы, которые использовались совсем недавно (most recently used-MRU), а в другом - давно не использовавшиеся буферы, которые доступны в первую очередь для перезаписи блоками, поступающими в кэш. Поступающий блок копируются в буфер в конце списка, где располагаются давно не использовавшиеся блоки, а затем переносится в середину списка. После этого он будет перемещаться вверх или вниз по списку в зависимости от использования.
Буферы в кэше буферов могут быть в одном из четырех состояний:
Pinned ("закрепленный") - означает, что несколько сеансов не могут в один и тот же момент времени писать в один блок и вынуждены ждать доступа к блоку, находящемуся в буфере.
Clean ("чистый") - означает, что буфер в настоящее время не закреплен (unpinned) и является кандидатом на удаление из кэша, если на его содержимое не будет опять ссылок. Содержимое буфера либо синхронизировано с блоком на диске, либо буфер использовался для генерации и обработки старого моментального снимка блока в режиме целостного чтения (consistent read - CR блок).
Free/unused (свободный/неиспользуемый) - означает, что буфер пустой, т.к. экземпляр только что был запушен. Состояние очень похоже на состояние clean, за исключением того, что буфер еще не использовался.
Dirty ("грязный") - буфер больше не является закрепленным, но его содержимое было изменено и должно быть записано на диск процессом DBWn перед удалением из кэша.
Серверные процессы используют блоки в кэше буферов, но доступными блоки делает процесс DBWn, записывая их в файлы данных. Очередь контрольной точки (checkpoint queue) представляет собой список буферов (блоков), которые должны быть записаны на диск.
Oracle поддерживает использование несколько размеров блоков в одной и той же базе данных. Стандартный размер блока используется в табличном пространстве SYSTEM и задается параметром инициализации DB_BLOCK_SIZE. Нестандарные размеры блока могут иметь значение 2" в диапазоне от 2 Кб до 32 Кб и задаются следующими параметрами инициализации:
DB_2K_CACHE_SIZE DB_4K_CACHE_SIZE
DB_8K_CACHE_SIZE
DB_16K_CACHE_SIZE DB_32K_CACHE_SIZE
Параметры DB_nKCACHE_SIZE не могут использоваться для задания размера кэша с буферами, равными стандартному размеру блока. Если значение параметра DB_BLOCK_SIZE равно лК, тогда нельзя задать параметр DB_nK_CACHE_SIZE. Размер кэша с буферами стандартного размера всегда определяется параметром
DB_CACHE_SIZE.
Любой кэш буферов ограничен по размеру. Поэтому не все данные, хранимые на диске, могут разместиться в кэше. Когда кэш заполнен полностью, последующие непопадания в кэш (cache misses) заставляют Oracle производить запись "грязных" (измененных) данных из кэша на диск для того, чтобы освободить место для новых данных. Если буфер "негрязный", то не требуется писать его содержимое на диск перед чтением нового блока в буфер. Последующее обращение в данным, которые уже были записаны на диск, вызовет дополнительное неудачное чтение из кэша (cache misses).
Размер кэша влияет на вероятность того, что запрос данных обнаружит их в кэше (попадание в кеш - cache hit). Когда кэш большой, больше вероятность того, что в нем содержатся запрашиваемые для обработки данные. С увеличением размера кэша возрастает процент удачных обращений к кэшу (cache hits).
Использование нескольких пулов буферовИспользование нескольких пулов буферов
АБД может повысить производительность кэша буферов базы данных, создавая несколько буферных пулов. Объекты назначаются буферному пулу в зависимости от того, как осуществляется доступ к этим объектам. Существует три буферных пула:
KEEP (удерживающий); используется для удержания в памяти объектов, вероятность повторного использования которых велика - это позволяет уменьшить количество операций ввода-вывода. Удержание буферов в этом пуле обеспечивается за счет задания такого размера пула, который больше чем общий размер сегментов, размещаемых в этом пуле. В результате не возникнет необходимость выгрузки буферов из оперативной памяти на диск. Удерживающий пул конфигурируется путем задания значения параметра DB_KEEP_CACHE_SIZE.
RECYCLE (повторно используемый); используется для удаления из памяти блоков, если вероятность их повторного использования мала. Размер повторно используемого пула меньше, чем общий размер размещаемых в нем сегментов. Поэтому блоки, читаемые в этот пул, часто выгружаются на диск. Данный пул конфигурируется путем задания значения параметра DB_RECYCLE_CACHE_S IZE.
DEFAULТ (стандартный пул по умолчанию); этот пул существует всегда - он эквивалентен единственному кэшу буферов для экземпляра без удерживающего и рециклирующего пулов и конфигурируется с помощью параметра DB_CACHE_SIZE.
Примечание: память пулов keep и recycle не выделяется из пространства пула default.
Использование нескольких пулов буферов (продолжение)
Фраза BUFFER_POOL определяет буферный пул, который используется объектом по умолчанию. Она является частью предложения STORAGE и допустима в командах CREATE и ALTER для таблиц, кластеров и индексов. Блоки объекта, для которого явно не задан буферный пул, будут помещаться в пул DEFAULT.
Если в команде ALTER для объекта изменяется пул буферов по умолчанию, то все блоки, которые уже кэшированы в текущем пуле, остаются в нем до тех пор, пока они не будут выгружены обычным образом. Блоки, читаемые с диска, будут размешаться в новом буферном пуле, заданном для данного сегмента.
Пулы буферов назначаются сегменту, поэтому объекты с несколькими сегментами могут иметь блоки в нескольких буферных пулах. Например, индекс-таблица может иметь разные буферные пулы, определенные для индексного сегмента и сегмента переполнения.
Разделяемый пул
Размер разделяемого пула можно задать с помощью параметра инициализации SHARED_POOL__SIZE. Разделяемый пул (sharedpool) - это область памяти, в которой хранится информация, совместно используемая многими сеансами. Он содержит различные данные, которые отражены на слайде.
Библиотечный кэш
Библиотечный кэш содержит разделяемые области SQL и PL/SQL: полностью разобранные или откомпилированные представления блоков PL/SQL и команд SQL.
К блокам PL/SQL относятся:
процедуры и функции;
пакеты;
триггеры;
анонимные блоки PL/SQL.
Кэш словаря данных
Кэш словаря данных используется для хранения в памяти объектов словаря данных.
Users Global Area (UGA)
UGA содержит информацию о сеансах разделяемого сервера Oracle. При их использовании UGA размещается в разделяемом пуле, если не сконфигурирован большой пул.
Большой пул
Наличие большого пула
Размер большого пула должен быть явно указан. Память для большого пула выделяется непосредственно в SGA, но отдельно от разделяемого пула. Поэтому возрастает потребность в разделяемой памяти сервера Oracle, необходимой для запуска экземпляра.
Преимущества большого пула:
Большой пул используется для выделения памяти, необходимой сеансам:
серверных процессов ввода-вывода;
при выполнении операций резервирования и восстановления;
разделяемых серверных процессов Oracle и интерфейсу Oracle ХА (используется, когда в транзакции происходит взаимодействие с несколькими базами данных других производителей)
Выделяя память для сеансов разделяемых серверных процессов в большом пуле, сервер Oracle может использовать разделяемый пул непосредственно для кэширования разделяемых команд SQL. Это позволяет устранить дополнительную конкуренцию за доступ к разделяемому пулу, которая уменьшает доступное пространство для кэширования команд SQL и снижает производительность.
Память, используемая Java-приложениям
Java-пул (Java pool) - это структура внутри SGA, используемая для хранения Java-кода всех сеансов и данных внутри Java-машины.
Разделяемый пул
Разделяемый пул используется загрузчиком классов (class loader) внутри виртуальной Java-машины (Java Virtual Machine - JVM). Загрузчик классов расходует примерно 8 Кб на каждый загружаемый класс. Разделяемый пул также применяется, когда компилируется исходный Java-код и когда вызываются методы java-классов. Кроме того, память в разделяемом пуле занимается при создании спецификаций вызова и когда система динамически отслеживает загружаемые Java-классы в ходе выполнения.
Java пул
Менеджер памяти виртуальной машины Oracle (Oracle JVM memory manager) размещает все остальные Java-структуры в ходе выполнения в Java-пуле, в том числе совместно используемые, располагаемые в памяти представления Java-методов и определения классов, а также Java-объекты, которые мигрируют в пространство сеанса в конце выполнения вызова.
Память Java-пула используется различными путями в зависимости от того, использует ли база данных Oracle разделяемые серверные процессы или нет.
Дополнительные сведения об использовании памяти Java-пула см. в документе Oracle Database Java Developer's Guide.
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot
База данных Oracle создает и использует структуры памяти для различных целей. Например, память хранит выполняемый код программы, данные, которые совместно используются пользователями, а также частные области данных для каждого подключенного пользователя. Две основных структуры памяти связаны с экземпляром:
Системная Глобальная область (SGA): Группа структур разделяемой памяти, известных как компоненты SGA, которые содержат данные и управляющую информацию для одного экземпляра Базы данных Oracle. SGA совместно используется всеми серверными и фоновыми процессами. Примеры данных, хранимых в SGA, включают кэшированные блоки данных и общие области SQL.
Глобальные программные области (PGA): области памяти, которые содержат данные и управляющую информацию для серверного или фонового процесса. PGA - неразделяемая память, создаваемая Базой данных Oracle при запуске серверного или фонового процесса. Доступ к PGA является монопольным для серверного процесса. У каждого серверного процесса и фонового процесса есть своя собственная PGA.
SGA - область памяти, которая содержит данные и управляющую информацию для экземпляра. SGA включает следующие структуры данных:
Разделяемый пул: Кэширует различные конструкты, которые могут совместно использоваться пользователями
Кэш буферов базы данных: Кэширует блоки данных, получаемые от базы данных
Буферный пул хранения: специализированный тип буферного кэша базы данных, который настраивается для хранения блоков данных в памяти на длительные промежутки времени
Буферный пул удаления: специализированный тип буферного кэша БД, который настраивается для быстрого повторного использования или удаления блока из памяти
Буферный кэш nK: Один из нескольких специализированных буферных кэшей БД, разработанный для хранения блоков с размером, отличающимся от размера блока базы данных по умолчанию
Буфер журнала повторов: Кэширует информацию о повторах (используемую, например, при восстановлении экземпляра), пока она не будет записана в физические файлы журнала повторов, хранимые на диске
Большой пул: Дополнительная область, которая обеспечивает выделения памяти большого объема для определенных больших процессов, таких как резервное копирование и операции восстановления Oracle, или серверные процессы ввода-вывода
Пул Java: Используется для всех специфичных для сеанса кода Java и данных в виртуальной машине Java (JVM)
Пул потоков: Используется потоками Oracle, чтобы хранить информацию, требуемую для операций захвата и применения
Когда Вы запускаете экземпляр с помощью Enterprise Manager или SQL*Plus, объем памяти, выделенный для SGA, выводится на экран.
Глобальной программной областью (PGA) является область памяти, которая содержит данные и управляющую информацию для каждого серверного процесса. Серверный процесс Oracle обслуживает запросы клиента. У каждого серверного процесса есть своя собственная частная PGA, которая выделяется при запуске серверного процесса. Доступ к PGA является монопольным для соответствующего серверного процесса, чтение и запись в PGA выполняется только кодом Oracle, действующим по запросу PGA. PGA делится на две главных области: стековое пространство и пользовательская глобальная область (UGA).
С динамичной инфраструктурой SGA размеры буферного кэша базы данных, разделяемого пула, большого пула, пула Java и пула потоков могут изменяться без необходимости завершения экземпляра.
База данных Oracle использует параметры инициализации, чтобы создать и управлять структурами памяти. Самый простой способ управлять памятью состоит в том, чтобы позволить базе данных автоматически управлять и настраивать ее для Вас. Чтобы сделать это (на большинстве платформ), необходимо только установить целевые параметры инициализации объема памяти (MEMORY_TARGET) и максимального объема памяти (MEMORY_MAX_TARGET).
Читайте также: