Mám webovou aplikaci (Java), která samozřejmě spouští mnoho dotazů (vybírá, vkládá, aktualizuje, maže) do databáze Oracle.
Chci zjistit následující pro posledních 7 dní:
SQLQuery Times-Executed Average-Resp-Time Average-Rows-Returned
====================================================================================
SELECT whatever 981 330ms 1201
UPDATE whatever 45 99ms 0
Je to něco, co mi může Oracle dát? Pokud ano, jak to mohu získat? Pokud ne Oracle, měl bych se podívat na ovladač JDBC?
Poznámka : Použití dat AWR vyžaduje , abyste měli Diagnostický balíček zakoupena možnost licence. Je možné spustit dotazy níže bez nutnosti potřebné licence. Před použitím těchto nástrojů se ujistěte se svým správcem DBA/licencí.
Úložiště automatické zátěže (AWR) obsahuje podrobnosti o činnosti v databázi. Jsou uloženy v různých dba_hist*
zobrazení.
Informace, které hledáte, jsou primárně k dispozici v dba_hist_sqlstat
Pohled. Připojením se k dba_hist_snapshot
můžete získat informace dostupné v daném období:
select *
from dba_hist_sqlstat t, dba_hist_snapshot s
where t.snap_id = s.snap_id
and t.dbid = s.dbid
and t.instance_number = s.instance_number
and s.begin_interval_time between trunc(sysdate)-1 and trunc(sysdate) -- yesterday's stats
Toto zobrazení obsahuje různé *_elapsed
sloupce, které uvádějí nárůst v daném snímku (časové období). např.:
Časy jsou v mikrosekundách. Můžete je kombinovat, abyste získali průměrnou dobu/statistiku provádění atd. Takto získáte například průměrnou dobu/provedení pro daný příkaz sql:
select sql_id, sum(t.elapsed_time_delta/1000000)/sum(t.executions_delta)
from dba_hist_sqlstat t, dba_hist_snapshot s
where t.snap_id = s.snap_id
and t.dbid = s.dbid
and t.instance_number = s.instance_number
and s.begin_interval_time between trunc(sysdate)-1 and trunc(sysdate) -- yesterday's stats
group by sql_id
The sql_id
je hash textu samotného SQL. Aktuální výrok najdete na:
select * from dba_hist_sqltext where sql_id = :sqlid
Všimněte si, že v AWR jsou uchovány pouze výkazy „s nejvyšší spotřebou“. Pokud tedy dotaz, který vás zajímá, není nejpomalejší, nejsprávnější, většina přístupu na disk atd., Nemusí to být v datech AWR. Můžete obejít tím, že "obarví" sql_ids zájmu. Tím je zajištěno, že zůstanou v AWR tak dlouho, dokud je nastavena doba uchování. Můžete to udělat spuštěním:
exec DBMS_WORKLOAD_REPOSITORY.ADD_COLORED_SQL(:sqlid);
Pokud chcete pouze přehled vašeho systému v časovém období (včetně „nejtěžších“ příkazů SQL), poskytuje to samotná zpráva AWR. Úvod do tohoto najdete na Oracle-base .