Oracle, мониторинг подвисших запросов

Sep 08, 2011 20:37

Бывает, что таблица чем-то заблокирована и очередь запросов начинает копиться. По факту устранения причины блокировки (возможно, кто-то забыл сделать коммит после очередной транзакции) запросы рассосутся конечно. Но сначала-то надо как-то эту хреновину обнаружить. Просматривать список сессий глазами не самый рациональный вариант ввиду рутины, скукоты и человеческой забывчивости. А машине эту хрень доверить - самое оно.

Использую в работе небольшую обвязку на перле, которая выявляет запросы, висящие от 10 секунд и больше и по факту накопления таких запросов больше "критической массы", получаю уведомление емылом, чтобы была возможность среагировать вовремя и ДО пришествия звиздеца, а не срать кирпичами ПОСЛЕ. Годный и кошерный подход, на мой взгляд.

Количество подвисших запросов считаю в системной вьюшке (думаю, что так делают все правильные пацаны):

SELECT COUNT(last_call_et) FROM gv$session WHERE status='ACTIVE' AND last_call_et>=10 AND username IS NOT NULL

Сами же запросы (если есть повод реагировать и шевелиться дальше) выковыриваю более детально:

SELECT username, machine, last_call_et, (SELECT sql_text FROM gv$sql WHERE sql_id=s.sql_id AND inst_id=s.inst_id) sql_text
FROM gv$session s
WHERE
status='ACTIVE'
AND last_call_et>=10
AND username IS NOT NULL

Уведомления и все остальное это уже дело техники.

oracle, компьютерные штучки, работа, sql

Previous post Next post
Up