|
Программирование >> Oracle
Области PGA и UGA Как уже было сказано, PGA - это область памяти процесса. Эта область памяти используется одним процессом или одним потоком. Она недоступна ни одному из остальных процессов/потоков в системе. Область PGA обычно выделяется с помощью библиотечного вызова malloc() языка С и со временем может расти (или уменьшаться). Область PGA никогда не входит в состав области SGA - она всегда локально выделяется процессом или потоком. Область памяти UGA хранит состояние сеанса, поэтому всегда должна быть ему доступна. Местонахождение области UGA зависит исключительно от конфигурации сервера Oracle. Если сконфигурирован режим MTS, область UGA должна находиться в структуре памяти, доступной всем процессам, следовательно, в SGA. В этом случае сеанс сможет использовать любой разделяемый сервер, так как каждый из них сможет прочитать и записать данные сеанса. При подключении к выделенному серверу это требование общего доступа к информации о состоянии сеанса снимается, и область UGA ста- Не поддавайтесь ни на какие уговоры и не отказывайтесь от режима ARCHIVELOG. Вы потратили много времени на разработку приложения, поэтому надо, чтобы пользователи ему доверяли. О доверии можно забыть, если их данные будут потеряны. Итак, мы рассмотрели основные типы файлов, используемых сервером Oracle: от небольших файлов параметров инициализации (без которых не удастся даже запустить экземпляр) до принципиально важных файлов журнала повторного выполнения и файлов данных. Обсудили структуры хранения данных в Oracle: от табличных пространств, сегментов и экстентов до блоков базы данных - наименьшей единицы хранения. Была описана обработка контрольной точки в базе данных и даже (несколько преждевременно) затронута работа физических процессов или потоков, составляющих экземпляр Oracle. В последующих разделах этой главы мы более детально рассмотрим эти процессы и структуры памяти. Структуры памяти Теперь пришло время рассмотреть основные структуры памяти сервера Oracle. Их три. SGA, System Global Area - глобальная область системы. Это большой совместно используемый сегмент памяти, к которому обращаются все процессы Oracle. PGA, Process Global Area - глобальная область процесса. Это приватная область памяти процесса или потока, недоступная другим процессам/потокам. UGA, User Global Area - глобальная область пользователя. Это область памяти, связанная с сеансом. Глобальная область памяти может находиться в SGA либо в PGA. Если сервер работает в режиме MTS, она располагается в области SGA, если в режиме выделенного сервера, - в области PGA. Рассмотрим кратко области PGA и UGA, затем перейдем к действительно большой структуре - области SGA. новится почти синонимом PGA, - именно там информация о состоянии сеанса и будет располагаться. Просматривая статистическую информацию о системе, можно обнаружить, что при работе в режиме выделенного сервера область UGA входит в PGA (размер области PGA будет больше или равен размеру используемой памяти UGA - размер UGA будет учитываться при определении размера области PGA). Размер области PGA/UGA определяют параметры уровня сеанса в файле init.ora: SORT AREA SIZE и SORT AREA RETAINED SIZE. Эти два параметра управляют объемом пространства, используемым сервером Oracle для сортировки данных перед сбросом на диск, и определяют объем сегмента памяти, который не будет освобожден по завершении сортировки. SORT AREA SIZE обычно выделяется в области PGA, a SORT AREA RETAINED SIZE - в UGA. Управлять размером областей UGA/PGA можно с помощью запроса к специальному представлению V$ сервера Oracle. Эти представления называют также представлениями динамической производительности. Подробнее эти представления V$ рассматриваются в главе 10. С помощью представлений V$ можно определить текущее использование памяти под области PGA и UGA. Например, запущен небольшой тестовый пример, требующий сортировки большого объема данных. Просмотрев несколько первых строк данных, я решил не извлекать остальное результирующее множество. После этого можно сравнить использование памяти до и после : tkyte@TKYTE816> select a.name, b.value 2 from v$statname a, v$mystat b 3 where a.statistic# = b.statistic# 4 and a.name like %ga % NAME VALUE session uga memory 67532 session uga memory max 71972 session pga memory 144688 session pga memory max 144688 4 rows selected. Итак, перед началом сортировки в области UGA было около 70 Кбайт данных, а в PGA - порядка 140 Кбайт. Первый вопрос: сколько памяти используется в области PGA помимо UGA? Вопрос нетривиальный и на него нельзя ответить, не зная, подключен ли сеанс к выделенному или к разделяемому серверу; но даже зная это нельзя ответить однозначно. В режиме выделенного сервера область UGA входит в состав PGA. В этом случае порядка 140 Кбайт выделено в области памяти процесса или потока. В режиме MTS область UGA выделяется из SGA, а область PGA относится к разделяемому серверу. Поэтому при работе в режиме MTS к моменту получения последней строки из представленного выше запроса разделяемый серверный процесс уже может использоваться другим сеансом. Соответственно, область PGA уже не принадлежит нам, так что мы используем всего 70 Кбайт памяти (если только не находимся в процессе выполнения запроса, когда областями PGA и UGA суммарно используется 210 Кбайт памяти). Теперь разберемся, что происходит в областях PGA/UGA нашего сеанса: tkyte@TKYTE816> show parameter sort area NAME TYPE VALUE sort area retained size integer 65536 sort area size integer 65536 tkyte@TKYTE816> set pagesize 10 tkyte@TKYTE816> set pause on tkyte@TKYTE816> select * from all objects order by 1, 2, 3, 4, ...(Нажмите Control-С после первой страницы данных) ... tkyte@TKYTE816> set pause off tkyte@TKYTE816> select a.name, b.value 2 from v$statname a, v$mystat b 3 where a.statistic# = b.statistic# 4 and a. name like %ga % 5 / NAME VALUE session uga memory 67524 session uga memory max 174968 session pga memory 291336 session pga memory max 291336 4 rows selected. Как видите, памяти использовано больше, поскольку данные сортировались. Область UGA временно увеличилась примерно на размер SORT AREA RETAINED SIZE, a область PGA - немного больше. Для выполнения запроса и сортировки сервер Oracle выделил дополнительные структуры, которые оставлены в памяти сеанса для других запросов. Давайте выполним ту же операцию, изменив значение SORT AREA SIZE: tkyte@TKYTE816> alter session set sort area size=1000000, Session altered. tkyte@TKYTE816> select a.name, b.value 2 from v$statname a, v$mystat b 3 where a.statistic# = b.statistic# 4 and a.name like %ga % NAME VALUE session uga memory 63288 session uga memory max 174968 session pga memory 291336 session pga memory max 291336
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |