|
|
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
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-а тоже не то, что мне нужно. Прошлась по форуму, решенных подобных вопросов преимущественно нет, нашла всего парочку. И то, проблема была в нехватке памяти на жестком. Конечно куча ссылок на то, что нужно оптимизировать запросы. Но это невозможно, тк нет исходников проги. И работала же она как-то раньше с теми же запросами. В общем, помогите кто чем может или пристрелите меня, голова уже кругом от причин и следствий этой ерунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 14:49 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
И для наглядности 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 15:53 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
hkolter, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 16:28 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
Вот лениво смотреть отчет, но если там, судя по предыдущему сообщению, в основном ожидания "library cache pin", "library cache lock", то в общем-то вырисовывается картинка установка обновлений/компиляция на работающей системе Т.е. ситуация: -- сессия1 запустила долгую пакет1.процедуру1 -- сессия2 решила установить новую версию PACKAGE (декларации) пакет1 -- просит исключительную блокировку на [строку] в library cache для этого пакета, но она уже удерживается сессией1 в разделяемом режиме -- виснет на ожидании "library cache pin" -- любая другая сессия, пытающаяся запустить что-либо из пакет1, становится в очередь за сессией2 как правило, на том же ожидании ... -- и все это не прочухается пока не закончится/прибъется сессия1 А ожидать одновременно может сотня сессий, а все ожидания суммируются... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 16:46 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 17:15 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, ИМХО, так, но про очередность не совсем. авторЗащелки в СУБД Oracle могут запрашиваться в двух режимах: “willing-to-wait” и “no-wait” (= immediate). Если процесс имеет возможность продолжать работу, не получив запрашиваемую защелку, то это запрос no-wait (например, redo copy latch). Если процесс не может продолжать работу, не получив запрашиваемую блокировку, то это режим willing-to-wait. Среди процессов, запрашивающих защелку, не поддерживается очередность. Множество процессов, пытающихся получить защелку, образуют толпу процессов, запрашивающих защелку в случайные моменты времени. Вот как это происходит: 1. Если защелка свободна, то запрос на нее удовлетворяется. Конец. 2. Если защелка занята, то процесс циклично повторяет запросы на защелку _spin_count раз. Если запрос удовлетворен, то Конец. 3. Если запрос на защелку не удовлетворен, то процесс “засыпает” на 1/100 секунды, после чего переходит к п.2. Если запрос опять не удовлетворен, то в каждом следующем цикле длительность интервала удваивается, после чего следует переход к п.2. источник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 17:52 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
Совсем-совсем Есть ожидание захвата защелок, а есть очередь -- ожидания типа "library cache pin" Простой пример -- чтоб перекомпилировать пакет необходимо (упрощено и совсем уж дилетантски -- половину не знаю, остальную не помню): -- загрузить описание пакета ( а так же его скомпилированную версию) в library cache для этого: Если пакета нет в памяти -- выделить ему соответствующий слот (по хэшу), если есть -- заблокировать этот слот Для этого: -- получить защелку shared pool, затем library cache в разделяемом режиме -- пробежаться по соответствующей цепочке, найти подходящий слот -- нам нужно закрепить этот слот от вымывания, для этого надо повесить PIN -- преобразуем защелку в X режим (мы собираемся изменять структуру State Objects) -- это как раз library cache lock ожидание -- добавляем пин в очередь (если пакет выполняется, то там держится пин в разделяемом режиме) -- защелочки отпускаем Но при этом мы находимся в очереди Перекомпилировать мы не можем, пока пакет выполняется, а последующие выполнения ждут пока пакет перекомпилируется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 18:22 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
Кстати, хоть в более последних версиях для управления shared pool/library cache все чаще используются mutex-ы, в данном сценарии (прикреплении к SO PIN-структуры) один фиг юзаются старые добрые защелки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 18:33 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровВот лениво смотреть отчет, но если там, судя по предыдущему сообщению, в основном ожидания "library cache pin", "library cache lock", то в общем-то вырисовывается картинка установка обновлений/компиляция на работающей системе Т.е. ситуация: -- сессия1 запустила долгую пакет1.процедуру1 -- сессия2 решила установить новую версию PACKAGE (декларации) пакет1 -- просит исключительную блокировку на [строку] в library cache для этого пакета, но она уже удерживается сессией1 в разделяемом режиме -- виснет на ожидании "library cache pin" -- любая другая сессия, пытающаяся запустить что-либо из пакет1, становится в очередь за сессией2 как правило, на том же ожидании ... -- и все это не прочухается пока не закончится/прибъется сессия1 А ожидать одновременно может сотня сессий, а все ожидания суммируются... Дааа, и вся эта ерудна происходит скачкообразно. Как уйти от этого? никак что ли. Почему тогда раньше этого не было? Изменений никаких не вносилось ни в базу, ни в прогу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 07:51 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
Посмотрел отчет, про перекомпиляцию забудь, тут нет ни "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, а то ты поломала всю разметку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 09:13 |
|
||
|
Низкие Execute to Parse и Parse CPU to Parse Elapsd, высокое Concurrency
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров,огрооооооооооооооооомное спасибо, что почекал, поразмышлял, подсказал и потратил время. Когда написал про фреймворки. Я опять задумалась насчет памяти, которую в первую же очередь, как начались проблемы я проверяла и увеличивала. Оказалось, что другой админ развернул на этом диске еще одно приложение, которое благополучно все съедало. Максимально бомбит с этого конечно. Но в общем, все у кого будет подобная ситуация, 100 раз перепроверьте наличие свободного места на жестком, не л*ханитесь как я Вячеслав Любомудров, еще раз спасибо, и извини, что в итоге потратил время из-за такой ерунды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 14:11 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39688266&tid=1883599]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
147ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 418ms |

| 0 / 0 |
