В тази публикация ще разгледаме различните заявки, за да извлечем историята на събитията на чакане на сесията на Oracle.
История на изчакващи събития в конкретна сесия от началото може да бъде намерена с помощта на заявката по-долу
set lines 120 trimspool on
col event head “Waited for” format a30
col total_waits head “Total|Waits” формат 999,999
col tw_ms глава “Waited|for (ms)” формат 999,999.99
col aw_ms глава „Средно|Изчакайте (ms)“ формат 999 999,99
col mw_ms глава „Макс|Изчакайте (ms)“ формат 999 999,99
изберете събитие, общо_чакане, време_чакано10 tw_ms br/>средно_чакане 10 aw_ms, max_wait*10 mw_ms
от v$session_event
където sid =&1
/
Да предположим, че искаме да видим хронологията на изчакването на сесията в определен период, за да получим събитието за изчакване само в този период
След това можем да използваме по-долу ASH заявка, за да извлечем данните
SQL> SELECT събитие,count()
ОТ dba_hist_active_sess_history a
КЪДЕ a.sample_time BETWEEN to_date('12-OCT-2016 11:49:00′,'DD-MON-YYYY HH24:MI:SS') И
to_date('12-OCT-2016 15:04:00′,'DD-MON-YYYY HH24:MI:SS') и session_id=1853 и SESSION_SERIAL#=19 група по събитие;
БРОЙ СЪБИТИЯ( )
синхронизиране на регистрационни файлове 88
SQL> SELECT modul,count()
2 ОТ dba_hist_active_sess_history a
3 КЪДЕ a.sample_time BETWEEN to_date('12-OCT-2016 11:49:00′,'DD-MON-YYYY HH24:MI:SS') И
4 to_date('12-OCT-2016 15:04:00′,'DD-MON-YYYY HH24:MI:SS') и session_id=1853 и SESSION_SERIAL#=19 и събитие ='синхронизиране на регистрационни файлове' група по модул;
БРОЙ НА МОДУЛ( )
e:FND:cp:FNDICM 88
Да предположим, че искаме да знаем историята на събитията на чакане от последния час, тогава може да се използва заявката по-долу
колона sample_time format a30
изберете sample_time, session_state, event, sql_id
от v$active_session_history
където session_id =&1 и sample_time> SYSDATE – 30/(24*60)
подредете по 1;
Важен случай на използване на техниката.
Да предположим, че искаме да знаем каква конкретна сесия чака през определен период и какво я блокира
Можем да използваме заявката по-долу, за да получим събитие за изчакване и други важни неща
col формат на събитието a30
col формат_време_на_програма a25
изберете session_id, sample_time, session_state, event, wait_time, time_waited, sql_id, sql_child_number CH#
от v$active_session_history
където session_id =19
и примерно_време между
to_date('9-DEC-16 01.25.00 PM','dd-MON-yy hh:mi:ss PM')
и
до_дата( '9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM')
поръчай по време на проба;
Сега, ако събитието е enq:TX – спор за заключване на редове, знаем, че определена сесия ще го блокира.
изберете sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
от v$active_session_history
където sample_time между
to_date('9-DEC-16 01.25.00 PM' ,'dd-MON-yy hh:mi:ss PM')
и
to_date('9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM ')
и session_id =19
и event ='enq:TX – спор за заключване на ред'
подреждане по време на проба;
Blocking_session ще покаже идентификатора на сесията, която е била блокирана. Можем да извлечем sql израза също така, като използваме sql_id, получен по-горе за блокираната сесия.
Подобни заявки могат да се използват за идентифициране на информацията за блокиращата сесия и след това предприемане на подходящи коригиращи действия
Важна информация
Сигурно сте видели, че използвахме често активна хронология на сесиите и архив на хронологията на активните сесии за тези заявки
Какво е история на активните сесии
Активната история на сесиите анкетира базата данни, за да идентифицира активните сесии и изхвърля съответната информация за всяка от тях – като потребителски идентификатор, състояние, машината, от която е свързана, и SQL, който изпълнява – в специална област в глобалната система на системата област (SGA) на екземпляра на базата данни, наречена ASH буфер
Архив на активната история на сесиите
Историята на активните сесии събира информация за активните сесии от екземпляра на базата данни всяка секунда. В зависимост от активността на базата данни, това ще доведе до много данни, събрани в ASH буфера, но тъй като ASH буферът е резидентна структура в паметта, той има само ограничено пространство. Освен това, когато екземплярът падне, паметта на екземпляра изчезва заедно с него. Следователно Oracle Database архивира информацията от ASH буфера в таблица на база данни, за да я направи постоянна. Тези архивирани таблични данни се виждат в изглед, наречен DBA_HIST_ACTIVE_SESS_HISTORY
Сродни статии
Oracle ASH(Активна история на сесиите) Полезни заявки
Как да разберете кой Sid извършва пълно сканиране на таблицата
Как да намерите подробности за сесията в базата данни на Oracle
Какво е DB време и средно активни сесии, активна сесия в oracle
как да намерите сесия, генерираща много повторения