powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
11 сообщений из 11, страница 1 из 1
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688167
hkolter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oracle 10.2.0.4.0 / OC Windows Server 2003
Работаю с базой недавно. Предыдущий админ не в помощь.
Последние три дня все пользователи начали шквально жаловаться на торможение работы проги. Юзаю ASH Viewer для быстрого просмотра того, что происходит в базе. Вижу, что при выполнении sql типа insert или PL/SQL EXECUTE образуется высокое concurrency типа latch: library cache.
Собрала AWR репорт, к сожалению за последние 5 дней (тк сервер останавливали). Файл прикрепила.
Здесь основные выдержки. которые привлекли мое внимание.

Execute to Parse %: 27.94
Parse CPU to Parse Elapsd %: 2.41

В топ 5 Timed Events на первом месте:
Waits Time(s) Avg Wait(ms) % Total Call Time Wait Classlatch: library cache 13 821 68 454 4 953 57.8 Concurrency

Time Model Statistics
Statistic Name Time (s) % of DB Timesql execute elapsed time 73 350.30 61.92parse time elapsed 43 426.25 36.66 DB CPU 43 424.03 36.66 PL/SQL execution elapsed time 9 550.12 8.06 hard parse elapsed time 5 262.82 4.44 connection management call elapsed time 3 000.80 2.53

Не знаю, что предпринять. Не увеличивать же размер shared pool-а. Дмуаю flush shared pool-а тоже не то, что мне нужно.
Прошлась по форуму, решенных подобных вопросов преимущественно нет, нашла всего парочку. И то, проблема была в нехватке памяти на жестком.
Конечно куча ссылок на то, что нужно оптимизировать запросы. Но это невозможно, тк нет исходников проги. И работала же она как-то раньше с теми же запросами.

В общем, помогите кто чем может или пристрелите меня, голова уже кругом от причин и следствий этой ерунды.
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688233
hkolter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И для наглядности PinHits
SELECT namespace, pins, pinhits, reloads FROM V$LIBRARYCACHE ORDER BY namespace;

NNAMESPACE PINS PINHITS RELOADSBODY 775591 775506 0CLUSTER 901 891 0INDEX 72813 72444 2JAVA DATA 0 0 0JAVA RESOURCE 0 0 0JAVA SOURCE 0 0 0OBJECT 0 0 0PIPE 0 0 0SQL AREA 20407407 19966800 3687TABLE/PROCEDURE 2452398 2446354 639TRIGGER 99846 99806 4
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688266
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hkolter,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select l.kgllkhdl handler,
       w.kglnaown || '.' || w.kglnaobj obj,
       l.kgllktype,
       decode( l.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown' ) mode_held,
       decode( l.kgllkreq, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown' ) mode_request,
       s.sid,
       s.serial#,
       s.program,
       s.seconds_in_wait,
       s.event,
       ( select q.sql_text from v$sql q where q.sql_id = s.sql_id and rownum = 1 ) sql_text
  from ( select distinct p1raw from v$session where state = 'WAITING' and event in ( 'library cache lock', 'library cache pin' ) ) b
  join dba_kgllock l on l.kgllkhdl = b.p1raw
  join x$kglob w on w.kglhdadr = l.kgllkhdl
  left join v$session s on s.saddr = l.kgllkuse;
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688276
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот лениво смотреть отчет, но если там, судя по предыдущему сообщению, в основном ожидания "library cache pin", "library cache lock", то в общем-то вырисовывается картинка установка обновлений/компиляция на работающей системе
Т.е. ситуация:
-- сессия1 запустила долгую пакет1.процедуру1
-- сессия2 решила установить новую версию PACKAGE (декларации) пакет1 -- просит исключительную блокировку на [строку] в library cache для этого пакета, но она уже удерживается сессией1 в разделяемом режиме -- виснет на ожидании "library cache pin"
-- любая другая сессия, пытающаяся запустить что-либо из пакет1, становится в очередь за сессией2 как правило, на том же ожидании
...
-- и все это не прочухается пока не закончится/прибъется сессия1

А ожидать одновременно может сотня сессий, а все ожидания суммируются...
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688292
Deemaas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688315
Deemaas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

ИМХО, так, но про очередность не совсем.
авторЗащелки в СУБД Oracle могут запрашиваться в двух режимах: “willing-to-wait” и “no-wait” (= immediate). Если процесс имеет возможность продолжать работу, не получив запрашиваемую защелку, то это запрос no-wait (например, redo copy latch). Если процесс не может продолжать работу, не получив запрашиваемую блокировку, то это режим willing-to-wait.

Среди процессов, запрашивающих защелку, не поддерживается очередность. Множество процессов, пытающихся получить защелку, образуют толпу процессов, запрашивающих защелку в случайные моменты времени. Вот как это происходит:

1. Если защелка свободна, то запрос на нее удовлетворяется. Конец.
2. Если защелка занята, то процесс циклично повторяет запросы на защелку _spin_count раз. Если запрос удовлетворен, то Конец.
3. Если запрос на защелку не удовлетворен, то процесс “засыпает” на 1/100 секунды, после чего переходит к п.2. Если запрос опять не удовлетворен, то в каждом следующем цикле длительность интервала удваивается, после чего следует переход к п.2.


источник
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688332
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совсем-совсем

Есть ожидание захвата защелок, а есть очередь -- ожидания типа "library cache pin"

Простой пример -- чтоб перекомпилировать пакет необходимо (упрощено и совсем уж дилетантски -- половину не знаю, остальную не помню):
-- загрузить описание пакета ( а так же его скомпилированную версию) в library cache
для этого:
Если пакета нет в памяти -- выделить ему соответствующий слот (по хэшу), если есть -- заблокировать этот слот
Для этого:
-- получить защелку shared pool, затем library cache в разделяемом режиме
-- пробежаться по соответствующей цепочке, найти подходящий слот
-- нам нужно закрепить этот слот от вымывания, для этого надо повесить PIN -- преобразуем защелку в X режим (мы собираемся изменять структуру State Objects) -- это как раз library cache lock ожидание
-- добавляем пин в очередь (если пакет выполняется, то там держится пин в разделяемом режиме)
-- защелочки отпускаем
Но при этом мы находимся в очереди

Перекомпилировать мы не можем, пока пакет выполняется, а последующие выполнения ждут пока пакет перекомпилируется
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688337
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, хоть в более последних версиях для управления shared pool/library cache все чаще используются mutex-ы, в данном сценарии (прикреплении к SO PIN-структуры) один фиг юзаются старые добрые защелки
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688478
hkolter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровВот лениво смотреть отчет, но если там, судя по предыдущему сообщению, в основном ожидания "library cache pin", "library cache lock", то в общем-то вырисовывается картинка установка обновлений/компиляция на работающей системе
Т.е. ситуация:
-- сессия1 запустила долгую пакет1.процедуру1
-- сессия2 решила установить новую версию PACKAGE (декларации) пакет1 -- просит исключительную блокировку на [строку] в library cache для этого пакета, но она уже удерживается сессией1 в разделяемом режиме -- виснет на ожидании "library cache pin"
-- любая другая сессия, пытающаяся запустить что-либо из пакет1, становится в очередь за сессией2 как правило, на том же ожидании
...
-- и все это не прочухается пока не закончится/прибъется сессия1

А ожидать одновременно может сотня сессий, а все ожидания суммируются...


Дааа, и вся эта ерудна происходит скачкообразно. Как уйти от этого? никак что ли. Почему тогда раньше этого не было? Изменений никаких не вносилось ни в базу, ни в прогу
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688540
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел отчет, про перекомпиляцию забудь, тут нет ни "library cache pin", ни "library cache lock"
А вот чего много, так это "parse", почти столько же как и "exec", т.е. практически каждый вызов. Это могут делать некоторые фраймворки.
Плохо, что время этого парса очень большое
Можно попробовать закешировать курсоры в сессии (установить SESSION_CACHED_CURSORS например в 200-1000), чтоб избежать этого парса вовсе
Т.к. это не hard parse, то выкидывать их из библиотечного кеша смысла, наверное, нет, тогда можно попробовать увеличить Shared pool

Делать отчет за 5 дней достаточно бессмыслено по нему видно только что твоя БД ничего не делает (из 1728000 доступных сек на 4 ядрах БД использовало 43424 и около 10000 из них именно на парс)

Отчет лучше собрать хотя бы за час (не больше) именно в момент повышенной загрузки и желательно, чтоб в него попали и топовые SQL-операторы со статистиками и частоиспользуемые сегменты -- уже какая-то информация к размышлению

Если ты в силу конспирации пытаешься скрыть/удалить какие-либо данные, то готовь отчет в виде TEXT, а не HTML, а то ты поломала всю разметку
...
Рейтинг: 0 / 0
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
    #39688855
hkolter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,огрооооооооооооооооомное спасибо, что почекал, поразмышлял, подсказал и потратил время. Когда написал про фреймворки. Я опять задумалась насчет памяти, которую в первую же очередь, как начались проблемы я проверяла и увеличивала. Оказалось, что другой админ развернул на этом диске еще одно приложение, которое благополучно все съедало. Максимально бомбит с этого конечно. Но в общем, все у кого будет подобная ситуация, 100 раз перепроверьте наличие свободного места на жестком, не л*ханитесь как я

Вячеслав Любомудров, еще раз спасибо, и извини, что в итоге потратил время из-за такой ерунды
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]