Память экземпляров oracle sga и pga имеет недостаточный размер
Обзор управления памятью
Память сервера баз данных имеет определенный размер. Поэтому пространство, доступное экземпляру базы данных 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 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot
ВОПРОС:
Как увеличить память выделяемую для 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;
Строка где PGA_TARGET_FACTOR = 1 — это текущий размер SGA — TARGET(MB) = 100Мб. Нужно чтобы ESTD_OVERALLOC_COUNT был равен 0 или стремился к 0, а CACHE_HIT_PERC был равен 100 или стремился к 100. В данном примере видно что можно даже уменьшить размер SGA до 50Мб. Предположим что мы оставляем PGA=100Мб.
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)
Память потребляемая Oracle — это сумма SGA + PGA. Т.к. для PGA нам необходимо 100Мб, тогда для SGA можно использовать 6318Мб — 100Мб = 6218Мб (округлим до 6Гб).
©Bobrovsky Dmitry
Для установки параметров нужно выполнить в sqlpus под sys команды:
Dmitry Bobrovsky
3.2) Установка размеров областей памяти для Oracle 11g (используется AMM)
В Oracle 11g с AMM в памяти выделяется одна область под все области, PGA также входит в эту одну общую область, поэтому можно использовать всю вычисленную свободную память 6318Мб (PGA вычитать не нужно). Для удобства округлим 6318Мб до 6Гб.
1. Объяснение терминов
(1) SGA: системная глобальная область является базовым компонентом экземпляра Oracle, который выделяется при запуске экземпляра, а системный глобальный домен SGA состоит в основном из трех частей: общего пула, буфера данных и буфера журнала.
(2) Общий пул: Общий пул используется для кэширования недавно выполненных операторов SQL и недавно использованных определений данных, в основном, включая: библиотечный кеш (область общего SQL) и кэш словаря данных (буфер словаря данных). Общая область SQL - это область, в которой хранятся пользовательские команды SQL, а в буфере словаря данных хранится динамическая информация об операциях базы данных.
(3) Буферный кеш: Буферный кеш базы данных используется для кэширования блоков данных, извлеченных из файлов данных, что может значительно повысить производительность запросов и обновления данных.
(4) Большой пул: Большой пул - это дополнительная область памяти в SGA, которая используется только в среде общего сервера.
(5) Пул Java: Пул Java предоставляет услуги для анализа синтаксиса команд Java.
(6) PGA: глобальная область процесса - это память, зарезервированная для каждого пользовательского процесса, подключенного к базе данных Oracle.
Во-вторых, анализ и корректировка
(1) Системный глобальный домен:
SGA относится к операционной системе, объему памяти, процессору и количеству пользователей, вошедших в систему одновременно. Он может занимать от 1/3 до 1/2 физической памяти системы ОС.
А. Общий пул:
Просмотрите уровень использования общей области SQL:
- select ( sum (pins-reloads))/ sum (pins) "Library cache" from v$librarycache; --Динамическая таблица производительности
Этот коэффициент использования должен быть выше 90%, в противном случае размер общего пула необходимо увеличить.
Посмотрите уровень использования буфера словаря данных:
- select ( sum (gets-getmisses-usage-fixed))/ sum (gets) "Data dictionary cache" from v$rowcache; --Динамическая таблица производительности
Этот коэффициент использования также должен быть выше 90%, в противном случае размер общего пула необходимо увеличить.
Измените размер общего пула:
б) буферный кеш:
Просмотр использования буфера данных базы данных:
- SELECT name ,value FROM v$sysstat order by name WHERE name IN ( '' DB BLOCK GETS '' , '' CONSISTENT GETS '' , '' PHYSICAL READS '' );
Рассчитанная частота попадания в буфер данных = 1- (физическое чтение / (блок дБ получает + постоянное получение)), этот коэффициент должен быть выше 90%, в противном случае необходимо увеличить размер буфера данных.
c) буфер журнала
Просмотрите использование буфера журнала:
- SELECT name , value FROM v$sysstat WHERE name IN ( '' redo entries '' , '' redo log space requests '' );
Результат запроса может вычислить частоту сбоев приложения буфера журнала:
Частота сбоев приложения = количество запросов / записей, частота сбоев приложения должна быть близка к 0, в противном случае буфер журнала слишком мал, а буфер журнала базы данных ORACLE необходимо увеличить.
г. Большой бассейн:
Это может снизить нагрузку на общий пул и может использоваться для резервного копирования, восстановления и других операций без использования алгоритма LRU для управления. Размер определяется базой данных «совместно используемый режим / режим БД». Если это общий режим, он будет больше.
Укажите размер Большого пула:
д. пул Java:
Используется, когда Java установлена и используется.
(2) регулировка PGA
А. PGA_AGGREGATE_TARGET настройки инициализации
Значение PGA_AGGREGATE_TARGET должно быть установлено на основе общего объема доступной памяти экземпляра Oracle. Этот параметр может быть изменен динамически. Предположим, что экземпляр Oracle может выделить 4 ГБ физической памяти, а оставшаяся память - операционной системе и другим приложениям. Вы можете выделить 80% доступной памяти для экземпляра Oracle, что составляет 3,2 ГБ. Области SGA и PGA теперь должны быть разделены в памяти.
В системе OLTP (оперативная обработка транзакций) типичная настройка памяти PGA должна составлять небольшую часть общего объема памяти (например, 20%), а оставшиеся 80% выделяются для SGA.
OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20%
В системе DSS (набор данных) типичная память PGA выделяется до 70% памяти из-за большого количества запросов, которые будут выполняться.
DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50%
В этом примере общий объем памяти составляет 4 ГБ. Для систем DSS вы можете установить для PGA_AGGREGATE_TARGET значение 1600 МБ, а для OLTP - 655 МБ.
б) настроить автоматическое управление PGA
Не нужно перезагружать БД, напрямую изменять онлайн.
SQL> alter system set workarea_size_policy=auto scope=both;
SQL> alter system set pga_aggregate_target=512m scope=both;
SQL> show parameter workarea
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy строка рабочей строки AUTO - для нее установлено значение AUTO
SQL> show parameter pga
c. Отслеживать производительность автоматического управления памятью PGA
V $ PGASTAT: это представление дает статистику на уровне экземпляра использования памяти PGA и автоматического распределения.
SQL> set lines 256
SQL> set pages 42
SQL> SELECT * FROM V$PGASTAT;
NAME VALUE UNIT
---------------------------------------------------------------- ---------- ------------
совокупный целевой параметр PGA: 536870912 текущее значение байта PGA_AGGREGATE_TARGET
агрегированная автоматическая цель PGA 477379584 байт-размер PGA, доступный в настоящее время для автоматического выделения, должен быть меньше, чем PGA_AGGREGATE_TARGET
привязка к глобальной памяти привязка к глобальной памяти 26843136 байт - максимальный размер рабочей области в автоматическом режиме, Oracle автоматически подстраивается в соответствии с рабочей нагрузкой.
total PGA inuse 6448128 bytes
всего выделено PGA
maximum PGA allocated 166175744 bytes
общая свободная память PGA, память PGA, 393 216 байт, максимальный свободный размер PGA
PGA memory freed back to OS 69074944 bytes
Всего PGA используется для авто рабочих площадей
maximum PGA used for auto workareas 1049600 bytes
total PGA used for manual workareas 0 bytes
maximum PGA used for manual workareas 530432 bytes
число перерасходов 1 количество перерасчетов 1118 - После запуска экземпляра количество распределений, которое происходит после запуска экземпляра, если это значение больше 0, следует рассмотреть возможность увеличения значения pga
bytes processed 114895872 bytes
extra bytes read/written 4608000 bytes
процент попаданий в кеш…
16 rows selected.
SQL> SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,
ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
ESTD_OVERALLOC_COUNT
FROM v$pga_target_advice;
The output of this query might look like the following:
TARGET_MB CACHE_HIT_PERC ESTD_OVERALLOC_COUNT
---------- -------------- --------------------
63 23 367
125 24 30
250 30 3
375 39 0
500 58 0
600 59 0
700 59 0
800 60 0
900 60 0
1000 61 0
1500 67 0
2000 76 0
3000 83 0
4000 85 0
Можно видеть, что когда TARGET_MB составляет 375M, ESTD_OVERALLOC_COUNT = 0, поэтому вы можете установить PGA_AGGREGATE_TARGET на 375M.
Приложение: Разница между оракулом SGA и PGA:
SGA: область памяти, используемая для хранения информации базы данных, которая используется процессами базы данных. Он содержит данные и управляющую информацию сервера Oracle, он распределяется в фактической памяти компьютера, на котором находится сервер Oracle. Если фактической памяти недостаточно, он записывается в виртуальную память.
PGA: содержит данные и управляющую информацию одного серверного процесса или одного фонового процесса. В отличие от SGA, совместно используемого несколькими процессами, PGA является областью, используемой только одним процессом. PGA выделяется, когда процесс создается и перерабатывается после его завершения.
[b] I. Объяснение терминов [/ b]
(1) SGA: системная глобальная область является базовым компонентом экземпляра Oracle и выделяется при запуске экземпляра, системный глобальный домен SGA состоит в основном из трех частей: общего пула, буфера данных и буфера журнала.
(2) Общий пул: Общий пул используется для кэширования недавно выполненных операторов SQL и недавно использованных определений данных, в основном, включая: библиотечный кеш (область общего SQL) и кэш словаря данных (буфер словаря данных). Общая область SQL - это область, в которой хранятся пользовательские команды SQL, а в буфере словаря данных хранится динамическая информация о работе базы данных.
(3) Буферный кеш: Буферный кеш базы данных используется для кэширования блоков данных, извлеченных из файлов данных, что может значительно повысить производительность запросов и обновления данных.
(4) Большой пул: Большой пул - это дополнительная область памяти в SGA, которая используется только в среде общего сервера.
(5) Java Pool: Java Pool предоставляет сервисы для синтаксического анализа команд Java.
(6) PGA: глобальная область процесса - это память, зарезервированная для каждого пользовательского процесса, подключенного к базе данных Oracle.
[b] Во-вторых, анализ и корректировка [/ b]
(1) Системный глобальный домен:
SGA относится к операционной системе, объему памяти, процессору и количеству пользователей, вошедших в систему одновременно. Он может занимать от 1/3 до 1/2 физической памяти системы ОС.
А. Общий пул:
Посмотрите использование общей области SQL:
Это использование должно быть выше 90%, в противном случае вам нужно увеличить размер общего пула.
Просмотрите использование буфера словаря данных:
Этот коэффициент использования также должен быть выше 90%, в противном случае вам необходимо увеличить размер общего пула.
Измените размер общего пула:
б) буферный кеш:
Просмотр использования буфера данных базы данных:
Рассчитанный коэффициент попадания в буфер данных = 1- (физическое чтение / (блок дБ получает + постоянное получение)), коэффициент попадания должен быть выше 90%, в противном случае необходимо увеличить размер буфера данных.
c) буфер журнала
Просмотрите использование буфера журнала:
Результат запроса может вычислить частоту сбоев приложения в буфере журнала:
Частота сбоев приложения = количество запросов / записей. Частота сбоев приложения должна быть близка к 0, в противном случае буфер журнала слишком мал и необходимо увеличить буфер журнала базы данных ORACLE.
г. Большой бассейн:
Может снизить нагрузку на общий пул, может использоваться для резервного копирования, восстановления и других операций, без использования алгоритма LRU для управления. Его размер назначается базой данных «совместно используемый режим / режим БД», если это общий режим.
Укажите размер Большого пула:
e.Java пул:
Используется, когда Java установлена и используется.
(2) регулировка PGA
a.PGA_AGGREGATE_TARGET настройка инициализации
Значение PGA_AGGREGATE_TARGET должно быть установлено на основе общего объема памяти, доступной для экземпляра Oracle. Этот параметр может изменяться динамически. Предположим, что экземпляр Oracle может выделить 4 ГБ физической памяти, а оставшаяся память - операционной системе и другим приложениям. Вы можете выделить 80% доступной памяти для экземпляра Oracle или 3.2G. Области SGA и PGA теперь должны быть разделены в памяти.
В системе OLTP (оперативная обработка транзакций) типичная настройка памяти PGA должна составлять меньшую часть общей памяти (например, 20%), а оставшиеся 80% выделяются для SGA.
[color=red]OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20% [/color]
В системе DSS (набор данных), поскольку выполняются очень большие запросы, типичная память PGA выделяется до 70% памяти.
[color=red]DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50%[/color]
В этом примере общий объем памяти составляет 4 ГБ. Для систем DSS вы можете установить для PGA_AGGREGATE_TARGET значение 1600 МБ, а для OLTP - 655 МБ.
б) настроить автоматическое управление PGA
Не нужно перезагружать БД, напрямую изменять онлайн.
SQL> [color=red]alter system set workarea_size_policy=auto scope=both;[/color]
SQL> [color=red]alter system set pga_aggregate_target=512m scope=both;[/color]
SQL> [color=red]show parameter workarea[/color]
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy string AUTO - для этого установлено значение AUTO
SQL> show parameter pga
c. Отслеживать производительность автоматического управления памятью PGA
V $ PGASTAT: Это представление дает использование памяти PGA на уровне экземпляра и статистику автоматического распределения.
SQL> set lines 256
SQL> set pages 42
SQL> SELECT * FROM V$PGASTAT;
NAME VALUE UNIT
---------------------------------------------------------------- ---------- ------------
совокупный целевой параметр PGA 536870912 байт - текущее значение PGA_AGGREGATE_TARGET
агрегированная автоматическая цель PGA 477379584 байта - размер PGA, доступной в настоящее время для автоматического выделения, должен быть меньше, чем PGA_AGGREGATE_TARGET
глобальная память ограничена 26843136 байт - максимальный размер рабочей области в автоматическом режиме Oracle автоматически корректирует в соответствии с рабочей нагрузкой.
total PGA inuse 6448128 bytes
всего выделено PGA 11598848 байт - максимальное выделение PGA
maximum PGA allocated 166175744 bytes
общая свободная память PGA 393216 байт - максимальный свободный размер PGA
PGA memory freed back to OS 69074944 bytes
общее количество PGA, используемое для автоматических рабочих областей 0 байтов - размер PGA, выделенный для автоматических рабочих областей
maximum PGA used for auto workareas 1049600 bytes
total PGA used for manual workareas 0 bytes
maximum PGA used for manual workareas 530432 bytes
количество перерасчетов 1118 - количество выделений, которые произошли после запуска экземпляра. Если это значение больше 0, рассмотрите возможность увеличения значения pga
bytes processed 114895872 bytes
extra bytes read/written 4608000 bytes
процент попаданий в кэш 96,14 процента
16 rows selected.
SQL> [color=red]SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,
ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
ESTD_OVERALLOC_COUNT
FROM v$pga_target_advice;[/color]
The output of this query might look like the following:
TARGET_MB CACHE_HIT_PERC ESTD_OVERALLOC_COUNT
---------- -------------- --------------------
63 23 367
125 24 30
250 30 3
375 39 0
500 58 0
600 59 0
700 59 0
800 60 0
900 60 0
1000 61 0
1500 67 0
2000 76 0
3000 83 0
4000 85 0
Можно видеть, что когда TARGET_MB составляет 375M, ESTD_OVERALLOC_COUNT = 0, поэтому для PGA_AGGREGATE_TARGET можно установить значение 375M.
Один, структура памяти
SGA (глобальная область системы): используется всеми сервисными и фоновыми процессами;
PGA (Program Global Area): только для каждого процесса обслуживания и фонового процесса; каждый процесс имеет PGA.
Два, SGA
Содержит данные экземпляра и управляющую информацию, включая следующую структуру памяти:
1) Буферный кеш базы данных: кэширует блоки данных, полученные с диска.
2) Буфер журнала повтора: кэшируйте информацию о повторе перед записью на диск.
3) Общий пул: кэширует различные структуры, которые могут быть разделены между пользователями.
4) Большой пул: дополнительная область, используемая для кэширования больших запросов ввода-вывода для поддержки параллельных запросов, режима общего сервера и определенных операций резервного копирования.
5) Пул Java: сохраните данные и код Java конкретного сеанса в виртуальной машине Java.
6) Пул потоков: используется потоками Oracle.
7) Хранить буферный кеш: Сохраните данные, хранящиеся в буферном кеше, чтобы сделать их как можно дольше.
8) Перезапустить буферный кеш: сохранить данные, срок действия которых истекает, в буферном кеше.
9) Буфер размером блока nK: Обеспечивает буфер для блоков данных, которые отличаются от размера блока данных по умолчанию в базе данных. Используется для поддержки передачи табличного пространства.
Буферный кэш базы данных, общий пул, большой пул, пул потоков и пул Java автоматически настраиваются в соответствии с текущим статусом базы данных;
Хранить буферный кеш, перезапускать буферный кеш, буфер размером nK может быть динамически изменен без закрытия экземпляра.
В структуре памяти Oracle, помимо SGA (System Global Area), процесс Oracle также использует следующие три глобальные области:
PGA: process global area
Многие люди не знают PGA с UGA Разница между двумя , Собственно разница между двумя Подобно разнице между процессом и сеансом из . Хотя обычно существует взаимно однозначная связь между процессом и сеансом , Но на самом деле сложнее, чем это . Очевидная ситуация MTS Конфигурация , Часто сессий намного больше, чем процессов . В этой конфигурации , У каждого процесса будет один PGA, В каждом разговоре будет один UGA . PGA Содержащаяся информация не имеет отношения к разговору , а также UGA Содержащаяся информация основана на конкретном сеансе .
Глобальную область процесса (PGA) можно понимать как глобальную область процесса или глобальную область программы. Ее сегмент памяти находится в частной памяти процесса, а не в общей памяти. Серверный процесс имеет свой собственный PGA, который содержит только конкретную информацию, относящуюся к процессу.Структуру в PGA не нужно защищать защелками, потому что другие процессы не могут войти в нее, чтобы получить к ней доступ.
Роль фиксированного PGA аналогична роли фиксированного SGA: оба содержат атомарные переменные (неразделимые), небольшие структуры данных и указатели на переменные PGA. .
Переменная PGA - это куча. Ее фрагменты можно загрузить с Fixed Table X$KSMPP Проверьте это, структура этой таблицы такая, как упоминалось ранее X$KSMSP То же самое. PGA HEAP содержит некоторую постоянную память, связанную с фиксированной таблицей, которая зависит от установки определенных параметров, таких как DB_FILES, LOG_FILES, CONTROL_FILES.
Как и PGA, UGA также состоит из двух областей: фиксированного UGA и переменного UGA, также известного как UGA HEAP.Фиксированный UGA содержит около 70 атомарных переменных, небольшие структуры данных и указатели на переменный UGA.
Чанки в UGA HEAP могут просматривать таблицу из своего собственного сеанса X$KSMUP Получите релевантную информацию, структура этой таблицы такая же, как у X $ KSMSP. UGA HEAP содержит некоторые сегменты постоянной памяти, связанные с фиксированными таблицами, которые зависят от настроек некоторых параметров. Это параметры OPEN_CURSORS, OPEN_LINKS и MAX_ENABLE_ROLES.
Если режим конфигурации сеансового соединения - это режим выделенного сервера (DDS), то есть сеанс соответствует процессу, тогда UGA помещается в PGA. В PGA фиксированный UGA является одним из блоков, а UGA HEAP является дочерним по отношению к PGA. Куча (Subheap).
Если сеансовое соединение настроено в режиме общего сервера (MTS), фиксированный UGA - это фрагмент в ОБЩЕМ ПУЛЕ или большом пуле, а UGA HEAP - это подкуча в ОБЩЕМ пуле или большом пуле.
В отличие от других регионов мира , Call Global Area Временно . Он существует только во время вызова функции , Обычно требуется только для вызовов самого нижнего уровня экземпляра CGA, Такие как : Проанализировать инструкцию SQL, выполнить инструкцию SQL и извлечь вывод инструкции SELECT.
в одиночестве CGA Требуется при рекурсивном вызове . в SQL Во время анализа предложения , Требуются рекурсивные вызовы информации словаря данных , Потому что быть правым SQL Грамматический анализ , Также рассчитайте план выполнения при оптимизации выписки . выполненный PL/SQL Блокировать при обработке SQL Выполнение оператора также нужно вызывать рекурсивно. , в DML Когда оператор выполняется, выполнение триггера также необходимо вызывать рекурсивно. .
Независимо от того UGA Размещен PGA До сих пор внутри SGA в ,CGA Все PGA Подгруппа (Subheap) . Важным выводом из этого факта является то, что сеанс должен быть процессом во время вызова. . Ибо в MTS из Oracle Это важно понимать при разработке приложений процесса базы данных. . Если будут еще звонки , Придется увеличить processes Чтобы приспособиться к увеличению количества звонков .
Нет CGA Структура данных в ,CALLS Не могу работать . И на самом деле последовал CALL Связанные структуры данных обычно размещаются UGA в , Такие как SQL AREA,PL/SQL AREA , SORT AREA, hash area, bitmap area Они все должны быть UGA в , Потому что они должны CALLS Всегда должен существовать и быть доступным . а также CGA Структура данных, содержащаяся в CALL Может быть выпущен после окончания . Например CGA Содержит информацию о рекурсивных вызовах , непосредственный I/O BUFFER Есть и другие временные структуры данных .
PGA включает:
1)Fixed PGA
2) UGA (выделенный сервер), когда система является общим сервером, UGA находится в общем пуле или большом пуле.
3)CGA
И UGA, и CGA принадлежат Variable PGA (куча PGA)
UGA включает:
1)Fixed UGA
2)private SQL area
3)session memory
4)SQL Work Areas
Частная область SQL, память сеанса и рабочие области SQL принадлежат переменной UGA (куча UGA).
6. private SQL area
можно разделить на две части:
1) Область постоянной памяти: в ней хранится некоторая информация о курсоре, необходимая, когда один и тот же оператор SQL выполняется несколько раз, например связываемые переменные. Эта часть памяти освобождается только при закрытии курсора. Так называемая: область постоянной памяти.
2) Область выполнения: первым шагом при обработке операторов SQL является создание области выполнения, в которой хранится информация, используемая при выполнении SQL. Для операторов DML область освобождается при выполнении SQL; для операторов select область освобождается, когда все строки данных возвращаются пользователю.
7. session area
Сохранение некоторых параметров сеанса, таких как: измененные параметры NLS, измененные параметры оптимизатора optimizer_mode, информация отслеживания, включенная командой alter session, доступные роли и открытые ссылки на БД. , Фактически используемый пакет и т. Д.
8. SQL work area
Рабочая область SQL - самая важная часть UGA, занимающая большую часть памяти UGA. В основном используется при сортировке (по порядку, по группировке), хэш-объединению. Размер рабочей области SQL имеет большое влияние на производительность.
Как правило, маловероятно, что большое количество сортировок будет полностью завершено в рабочей области SQL. Поскольку памяти не так много, временное табличное пространство обычно используется для записи промежуточных результатов сортировки во временное табличное пространство ( Сортировка диска ). В зависимости от размера рабочей области SQL временное табличное пространство может использоваться один или несколько раз. Итак, есть три ситуации:
1) оптимальный: сортировка полностью производится в памяти;
2) onepass: сортировка завершена, диск нужно использовать один раз;
3) многопроходный: для завершения сортировки требуется использовать диск несколько раз;
Оптимальный вариант обычно нереалистичен. Обычно мы стараемся обеспечить однопроходный режим. Если используется многопроходный режим, производительность сильно упадет. Давайте сначала посмотрим на процесс сортировки:
Алгоритм сортировки использует сортировку по куче; метод сортировки - это пакетная сортировка, например сортировка 10 000 записей, деление их на 100 раз и сортировка 100 записей каждый раз; когда сортировка 100 завершена, запись во временное табличное пространство; Отсортируйте следующие 100 элементов и запишите их во временное табличное пространство после сортировки; наконец, выполните операцию слияния для 100 частично отсортированных очередей в временном табличном пространстве. Чтобы завершить сортировку 10 000 записей. Это идеальная ситуация, потому что диск читается и записывается только один раз, что относится к onepass. Если сортировка включает несколько операций чтения и записи диска, она относится к многопроходной. Обычно мы стараемся настроить размер sort_area_size, чтобы избежать многопроходной сортировки.
Рабочую область SQL можно разделить на следующие части:
Область сортировки (sort_area_size), хэш-область (hash_area_size), область растрового изображения ( create_bitmap_area_size, bitmap_merge_area_size) и т. д. Они существенно влияют на производительность сортировки, хэш-соединения, растрового изображения и т. д.
9. Автоматическое управление PGA
До Oracle9i мы управляли PGA, задавая такие параметры, как sort_area_size, hash_area_size.
SQL> show parameter area_size;
NAME TYPE VALUE
bitmap_merge_area_size integer 1048576
create_bitmap_area_size integer 8388608
hash_area_size integer 131072
sort_area_size integer 65536
workarea_size_policy string AUTO
SQL> show parameter sort_area;
NAME TYPE VALUE
sort_area_retained_size integer 0
sort_area_size integer 65536
Начиная с Oracle9i, Oracle представила автоматическое управление PGA. Размер отдельно устанавливать не нужно.
Настройка параметров workarea_size_policy Можно выбрать параметры между автоматическим PGA (автоматическое значение по умолчанию автоматически) и ручным управлением PGA (ручное).
Затем передайте параметры инициализации pga_aggregate_size Установить общий объем памяти PGA (эквивалент sga_max_size SGA). Обратите внимание, что в Oracle9i автоматическое управление PGA действительно только для выделенного сервера, а не для разделяемого сервера, но в Oracle10g автоматическое управление PGA действительно.
10. Настройка размера PGA:
Для систем OLTP типичная память PGA:
PGA_AGGREGATE_SIZE = (total_memory * 80%) * 20%
Для систем OLAP будут выполняться очень большие запросы:
PGA_AGGREATE_SIZE = (total_memoery * 80%) * 50%
80% означает, что 80% общей памяти машины выделено Oracle. Тогда 20% из 80% будут переданы PGA.
Мы также можем использовать некоторые представления, относящиеся к PGA, чтобы настроить размер pga_aggregate_size:
v$pgastat, v$pga_target_advice, v$pga_target_advice_histogram
Используйте v $ pgastat для просмотра текущей статистики PGA (Аналогично v $ sgastat и SGA):
NAME VALUE UNIT
aggregate PGA target parameter 71303168 bytes
aggregate PGA auto target 27297792 bytes
global memory bound 14260224 bytes
total PGA inuse 40966144 bytes
total PGA allocated 88008704 bytes
maximum PGA allocated 125034496 bytes
total freeable PGA memory 4259840 bytes
process count 23
max processes count 40
PGA memory freed back to OS 492634112 bytes
total PGA used for auto workareas 0 bytes
maximum PGA used for auto workareas 6105088 bytes
total PGA used for manual workareas 0 bytes
maximum PGA used for manual workareas 0 bytes
over allocation count 0
bytes processed 6275959808 bytes
extra bytes read/written 0 bytes
cache hit percentage 100 percent
recompute count (total) 33814
19 rows selected.
максимальное выделенное PGA: максимальное выделенное PGA
over allocation count: Over allocating PGA memory can happen if the value ofPGA_AGGREGATE_TARGET is too small. When this happens, the Oracle Database cannot honor the value of PGA_AGGREGATE_TARGET and extra PGA memory needs to be allocated. If over allocation occurs, then increase the value of PGA_AGGREGATE_TARGET using the information provided by the V$PGA_TARGET_ADVICE view.
extra bytes read/written: Количество байтов, обработанных во время дополнительных проходов входных данных, накопленное с момента запуска экземпляра. Если рабочая область не может работать оптимально, выполняется один или несколько из этих дополнительных проходов.
Используйте v $ pga_target_advice, чтобы оценить размер PGA, который является рекомендуемым значением PGA. (Аналогично v $ sga_target_advice и SGA):
V$PGA_TARGET_ADVICE predicts how the cache hit percentage and over allocation count statistics displayed by the V$PGASTAT performance view would be impacted if the value of the PGA_AGGREGATE_TARGET parameter is changed . The prediction is performed for various values of the PGA_AGGREGATE_TARGET parameter, selected around its current value. The advice statistic is generated by simulating the past workload run by the instance.
Читайте также: