Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Заканчивается shared_pool  [new]
selyukm
Member

Откуда:
Сообщений: 44
Добрый день!
Помогите, пожалуйста! Не нашел решения проблемы в гугле.
Сервер: Windows Server 2003 32bit, 8гб fb-ddr2(система поддерживает до 64ГБ озу).
Версия Oracle 11.2.0.3.
База ночью отключается для холодного копирования каждый день.
Летом 2018 после запуска функциональности "выпуск виртуальной карты" стала возникать проблема с недостатком shared_pool.
Сколько памяти свободно смотрю селектом:
select * from v$sgastat
order by bytes desc

Сразу после рестарта свободно shared_pool 600M и все время уменьшается, примерно 100-120М в день.
И потом как эта память заканчивается, выдает ошибку ORA-04031 (невозможно выделить память shared_pool для процесса ИМЯ_ПРОЦЕССА).
Также по селекту выше вижу, что память съедают 2 процесса:
SQLA и KGLH0.
Изначально размер shared_pool был 300М, сделали 768М. Все равно не помогло.
Помогает при ошибке рестарт семафоров, после чего shared_pool очищается.
14 янв 19, 10:00    [21784502]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
maxski
Member

Откуда: Москва-Лимассол
Сообщений: 268
selyukm,

каждый день, ночью, в скрипте rman, в конце:
sql 'ALTER SYSTEM FLUSH SHARED_POOL';


Ну или вручную, если не хотите использовать "горячий" бэкап (rman).
14 янв 19, 10:08    [21784509]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
maxski
Member

Откуда: Москва-Лимассол
Сообщений: 268
В вообще, я бы посмотрел в v$sqlarea: кто генерит курсоры, которые без bind variables.
14 янв 19, 10:13    [21784513]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
selyukm
Member

Откуда:
Сообщений: 44
Я так понимаю, что нельзя до бесконечности увеличивать shared_pool? Даже если мы его укажем 5000М. Все равно он закончится со временем.
14 янв 19, 10:13    [21784514]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
-2-
Member

Откуда:
Сообщений: 15330
selyukm
Даже если мы его укажем 5000М.
Если укажешь 5000М, не сможешь стартовать БД.
14 янв 19, 11:12    [21784557]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
selyukm
Member

Откуда:
Сообщений: 44
https://www.sql.ru/forum/208727/vospriyate-bolee-4-gb-op-oracle-pod-windows
Пока сделали так:
1)добавили в boot.ini /3GB /PAE
2) создали в реестре параметр AWE_WINDOW_MEMORY, оставив его пустым.
3) установили sga_max= 1280м, shared_pool=768м.

Сам процесс oracle.exe ранее потреблял 500-600М ОЗУ, счас уже 1100М.
shared_pool свободно 220М:
select * from v$sgastat
where name = 'free memory'

Пока2 дня всё ОК.
17 янв 19, 10:54    [21787586]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
selyukm
Member

Откуда:
Сообщений: 44
Также заменили всю озу на сервере (2гбх4) на новую(4гбх4), проверив ее перед этим. Но shared_pool и дальше продолжает уменьшаться, примерно 10мб/час.
17 янв 19, 12:56    [21787760]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
Elic
Member

Откуда:
Сообщений: 29991
selyukm
Также заменили всю озу на сервере (2гбх4) на новую(4гбх4)
Зачем?
Лучше бы разрядность заменили.
17 янв 19, 13:00    [21787768]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
Melkomyagkii_newbi
Member

Откуда: из прошлого
Сообщений: 1865
KGLH0 вроде используется для динамического распределения памяти, типа буфера для переноса между shared pool и buffer cache - можно поробовать перейти на мануальное управление. Еще есть баг 14770516 SGA memory leak in KGLH0 under shared pool (Doc ID 14770516.8) - пофикшен в 12м.
sqla растет из-за неиспользования bind переменных(у Кайта был скрипт для поиска таких) или из-за adaptive свистоперделок -
select sql_id, count(*) from v$sql group by sql_id order by 2 desc;
select * from v$sql_shared_cursor where id = &sql_id;

А как семафоры рестартовали?
17 янв 19, 13:41    [21787840]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
selyukm
Member

Откуда:
Сообщений: 44
Melkomyagkii_newbi,
set scan off
set termout off
spool semafore_stop.log
set termout on

----------------------------------------------------------
--- Stop queues
----------------------------------------------------------
set termout on
prompt - Stopping queues
set termout off
declare
begin
for i in (select name from user_queues) loop
begin
execute immediate 'BEGIN DBMS_AQADM.STOP_QUEUE(queue_name => '''||i.name||'''); end; ';
dbms_output.put_line ('Queue '||i.name||' stopped OK.');
exception when others then
dbms_output.put_line(sqlerrm);
end;
end loop;
end;
/
----------------------------------------------------------
--- Stop registration job
----------------------------------------------------------
set termout on
prompt - Stopping semaphore
set termout off
exec if izd_semaphore_s.StopServer then null; end if;
/
exit;
17 янв 19, 14:47    [21787928]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
selyukm
Member

Откуда:
Сообщений: 44
selyukm,

К сообщению приложен файл. Размер - 36Kb
17 янв 19, 14:49    [21787932]     Ответить | Цитировать Сообщить модератору
 Re: Заканчивается shared_pool  [new]
selyukm
Member

Откуда:
Сообщений: 44
https://support.oracle.com/knowledge/Oracle Database Products/1534706_1.html
17 янв 19, 14:52    [21787938]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить