Oracle DBA Forum  

Вернуться   Oracle DBA Forum > Oracle University Official Study Notes (RUS) > База данных Oracle 10g Администрирование > База данных Oracle 10g Администрирование II

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 10.10.2009, 10:23
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию 08 Мониторинг и управление памятью

__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #2  
Старый 10.10.2009, 10:28
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Рассматриваемые вопросы

__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #3  
Старый 10.10.2009, 10:29
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Обзор управления памятью



Обзор управления памятью

Память сервера баз данных имеет определенный размер. Поэтому пространство, доступное экземпляру базы данных Oracle, ограничено. Необходимо уделять внимание тому, как распределяется память. Когда слишком много памяти под определенную область, а в этом нет необходимости, тогда существует вероятность того, что функционирование неоптимально, так как другим областям недостаточно места.

Использование автоматического выделения памяти значительно упрощает задачу. Но даже в таком случае в целях оптимизации необходим мониторинг и может потребоваться ручное конфигурирование размеров некоторых частей памяти.

В курсе Oracle Database 10g: Администрирование I было представлено введение в вопросы настройки памяти. В этом уроке описывается, как функционирует автоматическая настройка памяти, когда производить ручную настройку, что представляет из себя программная глобальная область (Program Global Area - PGA), а также предоставляются подробные сведения о каждой структуре памяти экземпляра Oracle.
__________________
Чат форума (требуется аккаунт на github или twitter)

Последний раз редактировалось Marley; 10.10.2009 в 10:31.
Ответить с цитированием
  #4  
Старый 10.10.2009, 10:36
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Структуры памяти 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), а также кэши буферов для блоков размера «К, могут быть изменены без остановки экземпляра.


Преконфигурированная база данных предварительно настроена и для нее установлены соответствующие параметры использования памяти. Однако по мере расширения использования может возникнуть необходимость изменить установки таких параметров.

Oracle предоставляет сигнальные сообщения и рекомендации для выявления проблем, связанных с размерами структур оперативной памяти и определению подходящих значений параметров использования памяти.

Программная глобальная область (Program Global Area - PGA) - область памяти, содержащая данные и управляющую информацию для каждого серверного процесса.

Серверный процесс (server process) - это такой процесс, который обслуживает запросы по выполнению команд, поступающие от клиента. Каждому серверному процессу принадлежит своя собственная приватная область PGA, которая создается, когда запускается серверный процесс. Доступ к этой области предоставляется исключительно этому серверному процессу и все действия по чтению и записи в эту область производятся только путем вызова соответствующего кода сервера Oracle.

Размер памяти, используемой PGA, и ее содержимое зависит от того, сконфигурирован ли экземпляр в режиме разделяемого сервера.

Обычно PGA содержит следующее:

Приватная область SQL (private SQL area). В этой области находятся такие данные, как информация привязки и структуры памяти, используемые при выполнении команды. Каждый сеанс, в котором вводится команда SQL, имеет приватную область SQL.
Память сеанса (session memory) . В памяти сеанса находятся переменные сеанса и другая информация, связанная с сеансом.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #5  
Старый 10.10.2009, 10:37
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Кэш буферов



Кэш буферов

Для конфигурирование кэша буферов используется параметр 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).
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #6  
Старый 10.10.2009, 10:40
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Использование нескольких пулов буферов



Использование нескольких пулов буферов

АБД может повысить производительность кэша буферов базы данных, создавая несколько буферных пулов. Объекты назначаются буферному пулу в зависимости от того, как осуществляется доступ к этим объектам. Существует три буферных пула:

KEEP (удерживающий); используется для удержания в памяти объектов, вероятность повторного использования которых велика - это позволяет уменьшить количество операций ввода-вывода. Удержание буферов в этом пуле обеспечивается за счет задания такого размера пула, который больше чем общий размер сегментов, размещаемых в этом пуле. В результате не возникнет необходимость выгрузки буферов из оперативной памяти на диск. Удерживающий пул конфигурируется путем задания значения параметра DB_KEEP_CACHE_SIZE.

RECYCLE (повторно используемый); используется для удаления из памяти блоков, если вероятность их повторного использования мала. Размер повторно используемого пула меньше, чем общий размер размещаемых в нем сегментов. Поэтому блоки, читаемые в этот пул, часто выгружаются на диск. Данный пул конфигурируется путем задания значения параметра DB_RECYCLE_CACHE_S IZE.

DEFAULТ (стандартный пул по умолчанию); этот пул существует всегда - он эквивалентен единственному кэшу буферов для экземпляра без удерживающего и рециклирующего пулов и конфигурируется с помощью параметра DB_CACHE_SIZE.


Примечание: память пулов keep и recycle не выделяется из пространства пула default.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #7  
Старый 10.10.2009, 10:41
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Использование нескольких пулов буферов (продолжение)



Использование нескольких пулов буферов (продолжение)

Фраза BUFFER_POOL определяет буферный пул, который используется объектом по умолчанию. Она является частью предложения STORAGE и допустима в командах CREATE и ALTER для таблиц, кластеров и индексов. Блоки объекта, для которого явно не задан буферный пул, будут помещаться в пул DEFAULT.

Синтаксис:

Код:
BUFFER_POOL   [KEEP   |   RECYCLE   |   DEFAULT].
Если в команде ALTER для объекта изменяется пул буферов по умолчанию, то все блоки, которые уже кэшированы в текущем пуле, остаются в нем до тех пор, пока они не будут выгружены обычным образом. Блоки, читаемые с диска, будут размешаться в новом буферном пуле, заданном для данного сегмента.

Пулы буферов назначаются сегменту, поэтому объекты с несколькими сегментами могут иметь блоки в нескольких буферных пулах. Например, индекс-таблица может иметь разные буферные пулы, определенные для индексного сегмента и сегмента переполнения.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #8  
Старый 10.10.2009, 10:43
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Разделяемый пул



Разделяемый пул

Размер разделяемого пула можно задать с помощью параметра инициализации SHARED_POOL__SIZE. Разделяемый пул (sharedpool) - это область памяти, в которой хранится информация, совместно используемая многими сеансами. Он содержит различные данные, которые отражены на слайде.

Библиотечный кэш
Библиотечный кэш содержит разделяемые области SQL и PL/SQL: полностью разобранные или откомпилированные представления блоков PL/SQL и команд SQL.

К блокам PL/SQL относятся:

процедуры и функции;
пакеты;
триггеры;
анонимные блоки PL/SQL.

Кэш словаря данных
Кэш словаря данных используется для хранения в памяти объектов словаря данных.

Users Global Area (UGA)
UGA содержит информацию о сеансах разделяемого сервера Oracle. При их использовании UGA размещается в разделяемом пуле, если не сконфигурирован большой пул.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #9  
Старый 10.10.2009, 10:45
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Большой пул



Большой пул

Наличие большого пула
Размер большого пула должен быть явно указан. Память для большого пула выделяется непосредственно в SGA, но отдельно от разделяемого пула. Поэтому возрастает потребность в разделяемой памяти сервера Oracle, необходимой для запуска экземпляра.

Преимущества большого пула:

Большой пул используется для выделения памяти, необходимой сеансам:

серверных процессов ввода-вывода;
при выполнении операций резервирования и восстановления;
разделяемых серверных процессов Oracle и интерфейсу Oracle ХА (используется, когда в транзакции происходит взаимодействие с несколькими базами данных других производителей)


Выделяя память для сеансов разделяемых серверных процессов в большом пуле, сервер Oracle может использовать разделяемый пул непосредственно для кэширования разделяемых команд SQL. Это позволяет устранить дополнительную конкуренцию за доступ к разделяемому пулу, которая уменьшает доступное пространство для кэширования команд SQL и снижает производительность.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
  #10  
Старый 10.10.2009, 10:46
Marley Marley вне форума
Senior Member
 
Регистрация: 19.09.2009
Сообщений: 7,385
По умолчанию Java - пул



Память, используемая 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.
__________________
Чат форума (требуется аккаунт на github или twitter)
Ответить с цитированием
Ответ
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 06:57. Часовой пояс GMT +3.


Powered by vBulletin®