В коде приложения вы можете сделать что-то вроде этого:
v_start_time := dbms_utility.get_time();
-- Your query here
-- ...
v_end_time := dbms_utility.get_time();
if v_end_time - v_start_time > v_max_time then
insert into log_table ...;
end if;
dbms_utility.get_time возвращает время в 1/100 секунды - поэтому вы не можете использовать это для точности 3 мс.Возможно, вы могли бы вместо этого использовать SYSTIMESTAMP.
Реально, я бы не регистрировал ни одного запроса, который занимал бы менее полсекунды, вы бы регистрировали практически все.