Pga память что это
- Что такое триггер?
- Что такое транзакция?
- Какие категории файлов включает физический уровень БД Oracle?
- В каком табличном пространстве хранится словарь данных?
- Какая разница между сегментом, экстентом и блоком данных?
На эти вопросы очень просто ответить, внимательно прочитав предыдущий выпуск.
Экземпляр Oracle состоит из процессов и разделяемой памяти, необходимой для доступа к информации в БД. Если копнуть чуть глубже, то экземпляр составляют пользовательские процессы, фоновые процессы Oracle и разделяемая область памяти, которую используют все эти процессы.
Что же представляет собой разделяемая память (shared memory)? Oracle использует разделяемую память в разных целях: как кэширование данных и индексов, так и хранение программного кода. Разделяемая память делится на несколько частей (или структур памяти). Основными структурами памяти Oracle являются Системная Глобальная Область (System Global Area или SGA) и Программная Глобальная Область (Program Global Area или PGA). Рассмотрим SGA и PGA более подробно.
Системная Глобальная Область (SGA)
кэш буферов БД - здесь хранятся последние открытые блоки данных. Эти блоки могут содержать данные, которые изменились, но еще не были записаны на диск (грязные блоки); данные, которые не изменялись либо были записаны на диск после изменения (чистые блоки). Так как кэш буферов БД хранит блоки данных на основе алгоритма последних используемых блоков, то наиболее активно используемые блоки постоянно остаются в памяти (тем самым, снижая дисковый ввод/вывод и увеличивая производительность системы).
буфер журнала изменений - хранит данные об изменениях БД. Буфер журнала изменений записывается в файл журнала изменений настолько быстро и эффективно, насколько это возможно. Помните, что журнал изменений используется для восстановления экземпляра СУБД Oracle в случае сбоя системы.
разделяемый пул - Это область SGA, в которой хранятся такие структуры разделяемой памяти, как разделяемые SQL-области в библиотечном кэше и внутренняя информация словаря данных. Разделяемый пул важен, потому что недостаточный объем памяти, выделенный для него, может привести к деградации производительности всей системы. Разделяемый пул состоит из библиотечного кэша и кэша словаря данных.
Библиотечный кэш используется для хранения разделяемых SQL. Здесь для каждого уникального SQL-выражения строиться дерево разбора строк и план исполнения, которые кэшируются (т.е. сохраняются в библиотечном кэше). Если несколько приложений отправляют одинаковые SQL-выражения, то для ускорения работы используется разделяемая SQL-область (так как используются уже разобранные строки и готовый план исполнения, то происходит экономия времени).
Oracle часто обращается к словарю данных при разборе SQL-выражений. Эти обращения составляют сущность работы Oracle. Узкие места в словаре данных влияют работу всех пользователей системы Oracle. Поэтому Вы всегда должны быть уверены, что объем памяти, определенный для словаря данных, достаточно велик для кэширования данных. Если кэш словаря данных мал, то Вы заметите значительное снижение производительности. Когда под кэш словаря данных Вы определите достаточный объем памяти, существенных проблем с производительностью быть не должно.
Программная Глобальная Область (PGA)
информация сеанса - если Oracle работает не в мультинитевом режиме, то информация сеанса хранится в PGA. В противном случае, информация сеанса хранится в SGA.
Процесс (или нить) - это механизм выполнения программного кода, который может выполняться незаметно для пользователя. Кроме того, несколько процессов могут работать одновременно. В разных операционных системах и на разных платформах они могут называться по-разному (процессы, нити, демоны и т.д.), но, в сущности, одинаковы. СУРБД Oracle работает с двумя видами процессов: пользовательские процессы и процессы Oracle (также известные как фоновые или теневые). В некоторых операционных системах (таких как Windows NT) процессы действительно являются нитями, но, чтобы не путаться в понятиях, будем называть их просто "процессами".
Пользовательские (клиентские) процессы - это пользовательские соединения с СУРБД. Пользовательский процесс управляет вводом и взаимодействует с серверными процессами Oracle через программный интерфейс Oracle. Пользовательский процесс используется также для выдачи информации пользователю, и, при необходимости, представляет ее в более удобной форме.
Процессы Oracle выполняют функции для пользовательских процессов. Могут быть разбиты на две группы: серверные процессы (выполняющие функции для активных процессов) и фоновые процессы (выполняют функции СУРБД в целом).
Серверные процессы (теневые) взаимодействуют между процессами пользовательскими и Oracle, исполняя пользовательские запросы. Например, если пользовательский процесс запрашивает часть данных, которых еще нет в SGA, то теневой процесс несет ответственность за чтение блоков данных из БД в SGA. Между пользовательским и теневым процессом возникает связь один-к-одному (конфигурация выделенного сервера), хотя один теневой процесс может одновременно взаимодействовать с несколькими пользовательскими (конфигурация мультинитевого сервера), экономя системные ресурсы.
DBWR (DataBase Writer) - ответственен за запись грязных блоков из блоковых буферов БД на диск. Когда транзакция изменяет информацию в блоке данных, этот блок данных не обязан быть немедленно записан на диск. Следовательно, DBWR может записывать данные на диск способом более эффективным, чем запись всех изменений по отдельности. DBWR обычно записывает данные тогда, когда они уже нужны для чтения. Записываются также те данные, которые были недавно использованы. Для систем с асинхронным вводом/выводом достаточно одного процесса DBWR. Для остальных систем можно значительно увеличить производительность, создав несколько процессов DBWR.
CKPT (ChecK PoinT) - дает сигнал процессам DBWR о необходимости выполнения контрольной точки и обновления всех файлов данных и управляющих файлов. Контрольная точка - это событие, когда все измененные буферы БД записываются на диск. CKPT - это не обязательный процесс. Если процесс CKPT не запущен, то его работу принимает на себя LGWR.
PMON (Process MONitor) - используется для поддержания остальных процессов и перезапуска преждевременно погибших :) Также PMON очищает неиспользуемые области буферов и освобождает те ресурсы, которые могут быть еще заняты. Ответственен за перезапуск всех зависших процессов и диспетчеров.
SMON (System MONitor) - выполняет восстановление экземпляра при его запуске. Это включает очистку временных сегментов и восстановление незаконченных транзакций. А также дефрагментирует БД.
RECO (RECOvery) - очищает незаконченные транзакции в распределенной БД. Выполняет фиксацию или откат спорных транзакций.
ARCH (ARCHiver) - копирует файлы журнала изменений при их заполнении. ARCH активен только в том случае, если СУРБД работает в режиме ARCHIVELOG. Если система не работает в этом режиме, то возможны ситуации, в которых не удастся восстановить систему после сбоя. В некоторых случаях все же можно работать и в режиме NOARCHIVELOG.
LCKn (Parallel Server LoCK) - до десяти процессов (где n - от 0 до 9) могут использоваться при работе сервера в параллельном режиме. Выполняют функции межэкземплярной блокировки.
Dnnn (Dispatcher) - при работе сервера в мультинитевом режиме, то существует хотя бы один диспетчерский процесс, ответственный за каждый протокол взаимосвязи. Диспетчерские процессы организуют взаимодействие между пользовательскими и разделяемыми серверными процессами.
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 выделяется, когда процесс создается и перерабатывается после его завершения.
Один, структура памяти
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.
Структура памяти является одним из наиболее важных компонентов базы данных Oracle. Это воздействие на операции в базе данных или меньше или меньше.база данныхВажные факторы в базе данных Oracle включают в себя 3 основные структуры памяти:
I. Система Global Area, SGA:
SGA представляет собой набор общих структур памяти и является общим для всех служб и фоновых процессов. Когда экземпляр базы данных запущен, глобальная память зоны системы автоматически назначаются. Память SGA будет утилизирована, когда экземпляр базы данных выключен. SGA является самой большой площадью памяти, и это также влияет набаза данныхВажные факторы в производительности.
Запрос ситуации в области SGA:
Total System Global Area 3290345472 bytes
Fixed Size 2217832 bytes
Variable Size 1795164312 bytes
Database Buffers 1476395008 bytes
Redo Buffers 16568320 bytes
SQL > select * from v$sga;
NAME VALUE
-------------------- ----------
Fixed Size 2217832
Variable Size 1795164312
Database Buffers 1476395008
Redo Buffers 16568320
Фиксированный размер представляет собой фиксированную область, хранить SGA каждыйсборкаИнформация. Невозможно изменить размер.
Переменный размер представляет собой вариабельные области, такие как общие бассейны, Java-бассейны, большие бассейны и т.д.
буферов базы данных представляет собой кэш базы данных.
Redo буферы представляет собой буфер журнала.
Фиксированный СЕО (СЕО Fixed)
Фиксированный SGA: Как следует из названия, это область постоянной памяти, указывая на другие части SGA, Oracle может просто понять, что область памяти для управления найти другие районы в SGA.
Блок буфера (База данных буфера кэша)
Данные Buffer Cache: Используется для хранения блоков данных, считываемых из файла данных, определяют с помощью параметра инициализации db_cache_size.
Принципы работы и процессы LRUs (с использованием наименее Recessly Используется в последнее время). Когда запросы, Oracle будет первым поставить чтение данных с диска в память для всех пользователей акций, а затем прочитать диск снова при запросах соответствующих данных. При вставке и обновлении, Oracle будет первые данные кэша в области, а затем записать на жесткий диск. Через блок буфера, Oracle может улучшить производительность ввода / вывода диска с помощью кэш-памяти (Примечание: скорость дискового ввода / вывода миллиметров, а скорость памяти ввода / вывода наносекунд)
Блок кэша данных состоит из множества больших размеров блоков кэша, которые являются такими же, как размер блока ОС. Эти блоки кэш разделены на 3 категории
- Грязные Буфера: Модифицированный блок кэша сохраняется во время грязной бугорок. То есть, когда SQL изменяет данные в caclet блоке, caclet помечен как грязный блок. И, наконец, грязный блок caclet записывается в процессе DBWn в файл данных жесткого диска, постоянно сохраняется.
Oracle управляет понижающими блоками через 2 списков (Dirty, LRU)
1. Сохранить в списке ГРЯЗНОГО был изменен, но не был записан в грязный блок столбиков в файле данных.
2. Сохраните все буферные блоки в списке LRU (пока не переехал в грязном блок, свободный блок кэш, хит блок). Когда блок кэш доступен, блок кэш перемещается в начало списка LRU и другие блоки caclet перейти к хвосту списка LRU. Последний блок кэш первым удаляется из списка LRU.
Принцип работы Процесс кэш данных является:
A. Oracle перед копированием блоков данных в файл данных в кэш данных, найти праздный блок Бока в кэше данных для того, чтобы приспособить блок данных. Oracle начинает поиск из хвоста списка LRU, пока требуемый простаивают блок буфера не найден.
B, если вы ищете столбики блок грязного, переместить блок блок сора в Грязный список и продолжить поиск. Если вы ищете незанятость блок Бока, написать блок данных и переместить блок caclet к главе Грязного списка.
C, если вы можете найти достаточное количество свободных блоков кэша, написать все блоки данных в соответствующих ожиданиях блока кэша. Поиск закончен.
D. Если нет достаточно простаивает блока кэша, Oracle прекращает поиск, но активизирует процесс DBWn и начать писать блок кэша-сор в списке ГРЯЗНОГО в файл данных.
E, грязный блок, который был записан в файл данных будет праздный Бок блок и помещается в список LRU. После выполнения этой работы, перезапустить поиск, пока не найдете достаточно свободного блока кэш-памяти.
Это можно увидеть здесь, что если ваш высокоскоростной буфер мал, он не останавливается, вызывая большие накладные расходы ввода / вывода.
Блок буфер может быть сконфигурирован 1, 2 или 3 пулов буферов, только один по умолчанию
- По умолчанию Pool: Все данные кэшируются здесь, если не указан магазин (Buffer_Pool корзины), когда вы находитесь в форме. Используйте алгоритм LRU для управления.
Оказывается, что есть только один пул по умолчанию, все данные кэшируются здесь. Это будет генерировать проблему: большое количество меньшее количество повторно используемых данных будет «выдавливать» буферы, которые необходимо повторно использовать, что приводит к увеличению увеличения диска ввода / вывода, а скорость работы снижена. Позже бассейн обслуживания и пул восстановления повторно используются в зависимости от того, часто используются его повторно. Эти трехчастные пул памяти должны быть определены вручную, и нет обмена. Например, проведение бассейн уже заполнен, и в пуле восстановления есть большое количество свободных памяти. В это время память о пуле восстановления не будет назначена в бассейн проведения. Эти пулы обычно считаются очень Прекрасное оборудование для настройки низкого уровня, только все другие средства настройки могут быть использованы только после его использования.
До 9i размер буфера данных определяется DB_BLOCK_BUFFER, а последующая версия определяется параметром db_cache_size и db_nk_cache_size. Различные табличные пространства могут использовать различные размеры блока, добавить параметры BlackSize в табличном пространстве, чтобы указать размер блока данных табличного пространства, если указано, составляет 2k, соответствующий размер буфера является значением параметра db_2k_cache_size, если он указан 4k, соответствующий размер буфера Это значение параметра db_4k_cache_size и так далее. Если блокируйте не указано, значение параметра db_block_size по умолчанию по умолчанию, соответствующий размер буфера - это значение db_cache_size.
Рево журнал буфер
Используется для хранения записей журнала, запись журнала - записать изменения в данные. Когда эта область света, фоновый процесс LGWR записывает файл журнала в онлайн-файл журнала на диске. Он определяет размер по параметру инициализации log_buffer. При одной и той же истине буфер журнала должен быть немного больше, особенно когда есть длительная транзакция, может уменьшить вводную связь.
Данные написаны здесь до того, как файл журнала здесь кэшируется, запускается в следующих случаях:
Общий пул
Используется для хранения операторов SQL, PL / SQL код, словарь данных, блокировки ресурсов и другой контрольной информации. Он контролирует его размер с помощью параметра инициализации Shared_pool_size. Он содержит следующие буферы:
1、 Словарь данных кэш, Словарь данных информации для хранения часто используемых. Например, определение таблицы, имя пользователя, пароль, разрешения, структура базы данных и т. Д.). Этот кеш часто обращается во время Oracle, работающего в анализе оператора SQL, определить, присутствует ли объект, имеет ли он разрешения. Если не в кеше в словаре данных, процесс сервера считывает его в кэш словаря данных из файла данных, который сохраняет информацию словаря данных. Сохраненные в словаре данных, кэш-память - это запись (например, база данных в памяти), а информация блока данных сохраняется в других зонах кэша.
2、 Кэш библиотеки: Целью кэша библиотеки является сохранение недавно анализированного оператора SQL PLA / SQL процедуры и пакеты. Таким образом, Oracle ищет в «кэше библиотеки» перед выполнением оператора SQL, процесс PL / SQL и пакеты, если они были проанализированы, используйте «кэш библиотеки» для разрешения результатов и выполнения планов выполнения без необходимости разрешения их значительно улучшит производительность и эффективность работы.
Oracle разлагает каждого оператора SQL на две части: невозможно поделиться.
а) Sharing SQL ROZE: Store недавно выполненная оператор SQL, разборка дерева грамматики и оптимизированного плана выполнения. Таким образом, такое же оператор SQL будет выполнен напрямую, а информация кэша в общей площади SQL не будет неоднократно проанализирована. Oracle При выполнении нового оператора SQL он выделят пространство для него в общей площади SQL, а размер задания зависит от сложности оператора SQL. Если в общей площади SQL нет свободного места, занятое пространство выделяется с помощью алгоритма LRU.
б) Частная зона SQL (режим совместного использования): хранить личную информацию, связанную с каждым сеансом или пользователем при выполнении оператора SQL. Другие сеансы не используют эту информацию, даже если вы делаете то же самое заявление SQL. Например, (переменные связывания, среда и параметры сеанса).
3、 Результаты кэш : РЕЗУЛЬТАТЫ КАЧЕЙ содержит кэш результата результатов запроса SQL и кэш результата результата функции PL / SQL. Этот кеш используется для хранения результатов функции SQL-запроса или функции PL / SQL для ускорения его будущей скорости выполнения.
4、 Блокировка и другая структура управления : Хранить информацию, необходимую в рамках рутины Oracle. Например (различные замки, защелки, значения регистра).
Большой пул
Большой бассейн определяется параметром инициализации Cars_pool_size, а оператор системы ALTER можно использовать для динамического изменения размера большого пула. Это необязательно, а DBA может определить, создать ли большой бассейн в зоне SGA в соответствии с фактические потребности бизнеса. Если вы не создаете большой пул, вам нужно большое количество места памяти, чтобы занять память об общем пуле, который будет иметь определенное влияние на производительность на общий пул, а большой пул - это зона, которая работает с этой функциональной изоляцией Отказ
Oracle требует много операций памяти:
А, резервное копирование и восстановление базы данных, например, в некоторых случаях для буферов диска IO
B, SQL-заявление с большим количеством сортировочных операций
D UGA выделяется в большом бассейне в режиме общего сервера (если установлен большой пул)
Java Pool (Java Pool)
Используется для поддержки запуска кода Java в базе данных, обычно управляется Java_pool_size
Поток пула
Во-вторых, глобальная зона процесса (Pora) Глобальная область, PGA
PGA - это эксклюзивная область памяти, и процесс Oracle использует его постоянным образом для хранения данных и контрольной информации. Когда процесс Oracle запускается, PGA создается базой данных Oracle. Oracle Service Process будет специально установить для этого пользователя, когда пользовательский процесс подключен к базе данных и создал соответствующий сеанс.PGAЗона, используемая для хранения связанного содержимого этого пользовательского сеанса. Когда эта пользовательская сеанс завершается, система автоматически отпустит это.PGAПамять, занятая районом. Эта область PGA имеет относительно большое влияние на производительность базы данных, особенно для выполнения операций сортировки. Поэтому управлять областью PGA разумно при необходимости и повышает производительность базы данных в значительной степени.
Глобальный район программы в основном включает в себя четыре части зоны сортировки, зону сеанса, область стека и область курсора, их собственную, завершить сеанс между пользовательским процессом и базой данных. Как правило, системный администратор в основном фокусируется на зоне сортировки, а размер зоны сортировки требуется вручную регулировку при необходимости. Кроме того, важно, чтобы область курсора - это динамическая область, созданная при открытии курсора и отпустите его, когда он закрыт. Следовательно, когда разрабатывается база данных, не часто открывайте и закрывайте курсор, могут повысить эффективность работы курсора и улучшить производительность базы данных. Контентные администраторы других разделов нужно только понимать их цели, а ежедневное обслуживание передано в систему базы данных.
1、 Установите разумную зону сортировки для сортировки.
Как база данных обработана, когда пользователь должен сортировать некоторые данные? Во-первых, система базы данных сохранит данные, которые необходимо отсортировать.PGAОдна область сортировки в зоне кеша программы. Затем данные сортируются в этой области сортировки. Если данные, необходимые для сортировки, имеют 2 м, то должно быть не менее 2 м пространства для размещения этих данных. Затем есть 2 м пространства для сохранения отсортированных данных во время заказа. Поскольку система считывает данные из памяти, чем в несколько тысяч раз больше, чем скорость чтения данных с жесткого диска, если эта сортировка и чтение данных можно сделать в памяти, это, несомненно, в значительной степени значительно значительно улучшить базу данных. Сортировать и доступа к производительности. Если эта отсортированная операция может быть сделана в памяти, очевидно, что это идеально. но еслиPGAОбласть сортировки в этом районе недостаточно, и невозможно разместить отсортированные данные. Что это будет? На данный момент вы получите пространство с жесткого диска, чтобы сохранить это требование. Эффективность сортировки уменьшается. Для этого в управлении базами данных, если вы найдете множество операций пользователя, вам нужно сортировать, то сделать пользователь настроить относительно большую область сортировки, а эффективность данных доступа пользователей может быть улучшена.
2、 Область сеанса сохраняет важную информацию, такую как разрешения пользователей.
существуетПрограммный буферСуществует также зона сеанса. Хотя большинство случаев администраторы не поддерживают эту область сеанса, позволяющие поддерживать системы баз данных. Однако администраторы все еще должны понимать роль этой сессии. Поскольку эта область сеанса напрямую связана с безопасностью данных в системе базы данных. Система базы данных - это не только хороший носитель, который хранит данные, но также предоставляет платформу для унифицированных данных управления, которые могут установить другой доступ к разным пользователям в соответствии с фактическими потребностями. Проще говоря, какие данные могут контролироваться в базе данных для улучшения безопасности данных.
Когда пользовательский процесс устанавливает сеанс с базой данных, система запрашивается, а затем сохраняется в этой области сеанса. Таким образом, когда доступ к пользователю обращается, система проверит информацию о правах пользователя в области сеанса, чтобы увидеть, имеет ли он соответствующий доступ. Поскольку система хранит информацию о разрешениях этого пользователя, скорость проверки привилегии пользователя очень быстро. Поскольку система не нужно читать данные на жестком диске, прочитайте его непосредственно из памяти. Эффективность чтения данных из памяти в несколько тысяч раз быстрее, чем жесткий диск.
Как правило, информация, такая как разрешения, роли, статистика производительности, такие как сеансы, сохраняются в этой области сеанса. Эта зона сеанса, как правило, самообеспечена в базе данных, а системный администратор не должен вмешиваться.
3、 Область стека сохраняет переменную информацию.
Иногда для улучшения повторного использования оператора SQL переменная связывания используется в операторе. Проще говоря, оператор SQL может принимать переменные, которые пользователь включен. Следовательно, пользователи нужно только вводить различные вариабельные значения, они могут удовлетворить различные требования к запросу. Если пользователю необходимо запросить все информацию сотрудников. Тогда необходимо запрашивать сотрудников для всех рабочих веков более 3 лет. В этом случае они фактически используют одно и то же оператор SQL, но только переменные переходят к системе различны. Это может значительно уменьшить рабочую нагрузку в разработку базы данных. Эта переменная называется переменной привязки в системе базы данных Oracle. Используйте переменную привязки для улучшения интерактивности пользователя. Кроме того, важная информация, такая как переменные сеанса, структуры памяти, операторы SQL, все еще хранятся в этой области штабелера.
Как правило, например, эта область стека, как и сессионная область выше, вы можете сделать вашу систему базы данных самообслуживание, а администраторы не должны участвовать. Размер этих разделов также автоматически назначается в соответствии с фактической ситуацией. Когда эта сессия пользователей заканчивается, система автоматически выпустит пространство, занятое этими регионами.
4、 Курсорская область.
Будь то база данных SQLSERVER или база данных Oracle, вам иногда нуждается в технологии курсора. При запуске оператора с помощью курсора система базы данных Oracle назначает блок в середине кеша программы.площадьОтказ Эта область называется областью курсора. Как правило, курсоры используются для выполнения некоторых из более специальных функций. Кроме того, в целом утверждение с использованием курсора ниже, чем эффективность исполнения других утверждений. Для этого менеджера все еще необходимо использовать курсор.
Область курсора - это динамическая область. Когда пользователь выполняет оператор курсора, система создаст зону в этой области курсора. Эта область будет выпущена, когда курсор выключен. Это создает и выпускает, и вам нужно прекратить использование определенных системных ресурсов, проводить определенное количество времени. С этой целью при использовании курсора, если курсор часто включается и выключается, производительность производительности оператора будет уменьшена. Таким образом, автор рекомендует при написании заявлений, если есть необходимость использования технологий курсора, обратите внимание на курсор, чтобы не поворачиваться и закрывать его.
Кроме того, в базе данных Oracle вы также можете улучшить производительность базы данных, ограничивая количество курсоров. Если есть параметр инициализации в системе базы данных Open_Cursors. Администраторы могут устанавливать этот параметр в соответствии с фактическими потребностями, и контролировать количество пользователей, чтобы открыть курсор одновременно. Однако необходимо отметить, что если в необходимости есть курсор, если аппаратный ресурс может поддерживать, то этот предел требуется. Это может избежать пользователейпроцессЧастые открытые и близкие курсоры. Поскольку частые открытые и закрывающие курсоры неблагоприятны для работы курсора, оно повлияет на производительность базы данных.
В-третьих, пользовательская глобальная область (UGA)
Выделенный режим сервера, процесс и сеанс представляют собой отношение к одному к одному. UGA включен в PGA. В режиме онлайн-сервера процесс и сеанс - пара отношений, поэтому UGA больше не будет принадлежать PGA и будет быть большим распределением бассейна. Однако, если вы не удались от большого пула, например, большой бассейн, слишком маленький, или если вы вообще не устанавливаете большой бассейн, вы распределите его от общего пула.
База данных 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).
Читайте также: