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

Откуда:
Сообщений: 65
Добрый день.

Наверное, уже спрашивали и не раз, но как найти блокирующий sql_id (DML например update) от сессии, которая этот dml давно выполнила, но не зафиксировала, после этого была куча селектов, но заблокированных сессий собрался вагон. Update был моментальным в ash отчёт не попал.
12 июн 19, 13:59    [21907291]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28990
alex722
как найти блокирующий sql_id (DML например update)
Никак.
12 июн 19, 14:25    [21907297]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
pihel
Member

Откуда: СПБ
Сообщений: 145
alex722,

из ash можно взять строку, которая блокируется, а потом если повезет по косвенным признакам выйти на программу и update в ней
+
select h.event, h.client_id, h.BLOCKING_SESSION, h.BLOCKING_SESSION_SERIAL# , H.CURRENT_BLOCK#, H.CURRENT_OBJ#, 
H.CURRENT_ROW#,o.owner || '.' || o.object_name as obj_name, COUNT(*) as cnt , COUNT(DISTINCT H.SESSION_ID) as sid_cnt,
'select * from '||o.owner || '.' || o.object_name||' where SYS.dbms_rowid.rowid_block_number(rowid) = '||H.CURRENT_BLOCK#||' and SYS.dbms_rowid.rowid_row_number(rowid) = ' || H.CURRENT_ROW# as sql_text
from dba_hist_active_sess_history h 
left join dba_objects o on o.object_id = H.CURRENT_OBJ#
where h.sample_time between :ST_DT and :ED_DT
and sql_id = :SQL_ID
AND h.BLOCKING_SESSION IS NOT NULL
GROUP BY h.event, h.BLOCKING_SESSION, h.BLOCKING_SESSION_SERIAL# , H.CURRENT_BLOCK#, H.CURRENT_OBJ#, H.CURRENT_ROW#,o.owner, o.object_name, h.client_id
order by cnt desc
13 июн 19, 09:34    [21907688]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28990
pihel
из ash можно взять строку, которая блокируется,
Она и так есть в заблокированной сессии.
pihel
потом если повезет по косвенным признакам
Звучит как "если и можно, то я не знаю как".
13 июн 19, 09:38    [21907689]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
Valergrad
Member

Откуда:
Сообщений: 636
Зная какая таблица менялась, обычно несложно через dba_source найти код который делает этот update.
В ash также есть plsql_object_id, plsql_object_subprogram_id, plsql_entry_object_id ... который даст подсказку ( смотреть для блокирующей сессии чуть раньше или чуть позже).
Но это все сработает только если эта сессия была не пользовательская, а приложения. Но если она была пользовательская - проще спросить у пользователя что он исполнял.
Зная код легко нагуглить как получить по коду sql_id ( это просто хэш от текста, какой функцией хешируется на память не помню ).
13 июн 19, 16:50    [21908081]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28990
Valergrad
Зная какая таблица менялась, обычно несложно через dba_source найти код который делает этот update.
В ash также есть plsql_object_id, plsql_object_subprogram_id, plsql_entry_object_id ... который даст подсказку ( смотреть для блокирующей сессии чуть раньше или чуть позже).
Но это все сработает только если эта сессия была не пользовательская, а приложения. Но если она была пользовательская - проще спросить у пользователя что он исполнял.
Зная код легко нагуглить как получить по коду sql_id ( это просто хэш от текста, какой функцией хешируется на память не помню ).
Столько бесполезного бреда...
14 июн 19, 07:34    [21908322]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 698
alex722
Добрый день.

Наверное, уже спрашивали и не раз, но как найти блокирующий sql_id (DML например update) от сессии, которая этот dml давно выполнила, но не зафиксировала, после этого была куча селектов, но заблокированных сессий собрался вагон. Update был моментальным в ash отчёт не попал.


Вот здесь есть несколько вариантов поиска блокирующих сессий и блокированных объектов, попробуй, может и найдешь чего.
14 июн 19, 19:40    [21908978]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17363
flexgen
несколько вариантов поиска блокирующих сессий и блокированных объектов, попробуй, может и найдешь чего.

Поиск блокирующей сессии и заблокированного объекта особых сложностей не представляет.
ТС хотел найти sql_id.
14 июн 19, 19:55    [21908980]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 698
andrey_anonymous
flexgen
несколько вариантов поиска блокирующих сессий и блокированных объектов, попробуй, может и найдешь чего.

Поиск блокирующей сессии и заблокированного объекта особых сложностей не представляет.
ТС хотел найти sql_id.


Тут может быть несколько вариантов, если объект все еще блокирован значит сессия не завершилась, т.е. в v$session и v$sql что-то может быть. Либо искать в dba_hist_sqltext все что относится к искомому объекту:

select * from dba_objects where object_id = <object_id>;
select * from dba_hist_sqltext where upper(sql_text) like upper '<object_name>';


И проверять содержимое поля sql_text всех тех sql_id, что получили. Если повезет то мы найдем наш sql_id.
14 июн 19, 21:06    [21908990]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 698
flexgen,

автор
значит сессия не завершилась


Имелась ввиду транзакция.
14 июн 19, 21:08    [21908991]     Ответить | Цитировать Сообщить модератору
 Re: Блокирующий sql_id  [new]
-2-
Member

Откуда:
Сообщений: 14668
flexgen
Если повезет
Этот вариант уже предлагали. Остается, правда, еще маленький нюанс - как узнать, что "повезло".
14 июн 19, 22:22    [21909009]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить