Начиная с версии 10g Oracle позволяет использовать AWR(Automatic Workload Repository) для анализа системы с целью решения проблем с производительностью.
В этой статье я покажу быстрый способ генерации отчета AWR.
В этой статье я выполняю все команды прямо из под пользователя SYS, но подойдет и другой пользователь с подходящими для работы привилегиями.
Для начала необходимо развернуть функцию генерации отчета.
create or replace function AWR_HTML(in_begin_point in number, in_end_point in number) return clob is ret_html clob; db_id number; begin select dbid into db_id from v$database; for i in ( select output from table(dbms_workload_repository.awr_report_html(db_id, 1, in_begin_point, in_end_point)) ) loop ret_html:=ret_html||i.output; end loop; return(ret_html); end AWR_HTML;
После этого необходимо определить на основе каких снапшотов будет построен отчет.
select snap_id, end_interval_time from dba_hist_snapshot order by snap_id desc
1458 20.01.16 11:00:07,855 1457 20.01.16 10:00:05,418 1456 20.01.16 09:00:02,709 ...
Обычно Oracle уже создаёт снапшоты в фоновом процессе с некоторой периодичностью, однако если вы хотите форсировать создание снапшота можно воспользоваться следующей процедурой.
begin dbms_workload_repository.create_snapshot; end;
Всё готово к генерации. Подставив найденные ID снапшотов в следующий селект можно сгенерировать отчет в формате html.
select awr_html(1457, 1458) from dual
Если вы пользуетесь средой разработки PL/SQL Developer, то при открытии получившегося clob он сразу же откроется во встроенном просмотрщике как html-страница. Очень удобно 🙂