Программирование >>  Oracle 

1 ... 25 26 27 [ 28 ] 29 30 31 ... 469


4 rows selected.

<kyte@TKYTE81 show parameter sort area NAME TYPE VALUE

sort area retained size integer 65536

sort area size integer 1000000

<ky(e@TK[E81 select * all objects order by 1, 2, 3, 4;

...(Нажмите Control-C после первой стх>анип1 данн1х) . <ky(e@TK[E81 set pause off

<kyte@TK[E81 select a.name, b.value

2 from v$statname a, v$mystat b

3 where a.statistic# = b.statistic#

4 and a.name like %

NAME VALUE

session uga memory 67528

session uga memory max 174968

session pga memory 1307580

session pga memory max 1307580

4 rows selected.

Как видите, в этот раз область PGA увеличилась существенно. Примерно на 1000000 байт, в соответствии с заданным значением SORT AREA SIZE. Интересно отметить, что в этот раз размер области UGA вообще не изменился. Для ее изменения надо задать другое значение SORT AREA RETAINED SIZE, как показано ниже:

tkyte@TKYTE816> alter session set sort area retained 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 1307580

session pga memory max 1307580

4 rows selected.



tkyte@TKYTE816> show parameter sort area

КАМЕ TYPE VALUE

sort area retained size integer 1000000

sort area size integer 1000000

tkyte@TKYTE816> select * from all objects order by 1, 2, 3, 4,

...(Нажмите Control-C после первой страницы данных) ...

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 66344

session uga memory max 1086120

session pga memory 1469192

session pga memory max 1469192

4 rows selected.

Теперь мы видим, что существенное увеличение размера области UGA связано с необходимостью дополнительно принять данные размером SORT AREA RETAINED SIZE. В ходе обработки запроса 1 Мбайт сортируемых данных кэширован в памяти . Остальные данные были на диске (где-то во временном сегменте). По завершении выполнения запроса это дисковое пространство возвращено для использования другими сеансами. Обратите внимание, что область PGA не уменьшилась до прежнего размера. Этого следовало ожидать, поскольку область PGA используется как куча и состоит из фрагментов, выделенных с помощью вызовов malloc(). Некоторые процессы в сервере Oracle явно освобождают память PGA, другие же оставляют выделенную память в куче (область для сортировки, например, остается в куче). Сжатие кучи при этом обычно ничего не дает (размер используемой процессами памяти только растет). Поскольку область UGA является своего рода подкучей (ее родительской кучей является область PGA либо SGA), она может сжиматься. При необходимости можно принудительно сжать область PGA:

tkyte@TKYTE816> exec dbms session.free unused user memory, PL/SQL procedure successfully completed.

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 %



КАМЕ VALUE

session uga memory 73748

session uga memory max 1086120

session pga memory 183360

session pga memory max 1469192

Учтите, однако, что в большинстве систем это действие - пустая трата времени. Можно уменьшить размер кучи PGA в рамках экземпляра Oracle, но память при этом операционной системе не возвращается. В зависимости от принятого в ОС метода управления памятью, суммарное количество используемой памяти даже увеличится. Все зависит от того, как на данной платформе реализованы функции malloc(), free(), realloc(), brk() и sbrk() (стандартные функции управления памятью в языке С).

Итак, мы рассмотрели две структуры памяти, области PGA и UGA. Теперь понятно, что область PGA принадлежит процессу. Она представляет собой набор переменных, необходимых выделенному или разделяемому серверному процессу Oracle для поддержки сеанса. Область PGA - это куча памяти, в которой могут выделяться другие структуры. Область UGA также является кучей, в которой определяются связанные с сеансом структуры. Область UGA выделяется из PGA при подключении к выделенному серверу Oracle и - из области SGA при подключении в режиме MTS. Это означает, что при работе в режиме MTS необходимо задать такой размер области SGA, чтобы в ней хватило места под области UGA для предполагаемого максимального количества одновременно подключенных к базе данных пользователей. Поэтому область SGA в экземпляре, работающем в режиме MTS, обычно намного больше, чем область SGA аналогично сконфигурированного экземпляра, работающего в режиме выделенного сервера.

Область SGA

Каждый экземпляр Oracle имеет одну большую область памяти, которая называется SGA, System Global Area - глобальная область системы. Это большая разделяемая структура, к которой обращаются все процессы Oracle. Ее размер варьируется от нескольких мегабайт в небольших тестовых системах, до сотен мегабайт в системах среднего размера и множества гигабайт в больших системах.

В ОС UNIX область SGA - это физический объект, которую можно увидеть с помощью утилит командной строки. Физически область SGA реализована как сегмент разделяемой памяти - отдельный фрагмент памяти, к которому могут подключаться процессы. При отсутствии процессов Oracle вполне допустимо иметь в системе область SGA; память существует отдельно от них. Однако наличие области SGA при отсутствии процессов Oracle означает, что произошел тот или иной сбой экземпляра. Эта ситуация - нештатная, но она бывает. Вот как выглядит область SGA в ОС UNIX:

$ ipcs -mb

IPC status from <running system> as of Mon Feb 19 14:48:26 EST 2001 T ID KEY MODE OWNER GROUP SEGSZ

Shared Memory:

m 105 0xf223dfc8 - rw-r-ora816 dba 186802176



1 ... 25 26 27 [ 28 ] 29 30 31 ... 469

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика