2011. február 26., szombat

Hogyan lehet lekérdezni egy futó OWB MAP tényleges végrehajtási tervét?

Az adattárház fejlesztő feladata, hogy az általa készített feldolgozások megfelelő teljesítményt nyújtsanak, azaz lefussanak a lehető legkevesebb erőforrás felhasználásával, a lehető legrövidebb idő alatt.

Személyes véleményem, hogy a fejlesztőnek folyamatosan foglalkoznia kell a teljesítmény kérdésével, már a kezdetektől fogva, a fejlesztési folyamat teljes életciklusa alatt. Ez az odafigyelés megtérül, mert a hosszabb futási idők, a pazarló végrehajtások a fejlesztő életét is megnehezítik, kevesebb fejlesztési időt, odafigyelést, szervezést igényel egy 5 perc alatt lefutó feldolgozás, mint egy hasonló bonyolultságú, de 60 perc futási idejű.

Én úgy dolgozom a fejlesztéseim során, hogy nyomon követem a fejlesztett MAP – ek végrehajtási tervét. Ezt a legegyszerűbben úgy tudom megtenni, hogy ha futtatok egy MAP – et, akkor az alábbi sql lekérdezést használva lekérdezem az Oracle adatbázisban éppen aktuálisan futó MAP – ek listáját ás a hozzájuk tartozó sql – t azonosító sql_id – t. A lenti lekérdezés összekapcsolja a session információkat az OWB audit adatokkal, így látom a konkrét MAP elnevezéseket is.


select s.sql_id, s.threads, s.module, a.map_name, a.elapsed
from (
  select S.SQL_ID, s.MODULE, count(*) threads, substr(s.module, 23, 7) aid
  from v$session s
  where s.MODULE like '%MODUL NEV%'
  group by sql_id, module
) s,
(
  select t.execution_audit_id, t.map_name, round((sysdate - t.start_time)*24*60) elapsed
  from owb_adw_run.all_rt_audit_map_runs t
  where t.start_time > sysdate - 1
) a
where s.aid = a.execution_audit_id (+);

Az eredményül kapott sql_id alapján lehetőség van a v$sql_plan táblában levő tényleges sql végrehajtási terv megjelenítésére. Ha nem innen vesszük a végrehajtási tervet, hanem azt explain plan – nel hozzuk létre egy külön session – ben, akkor beleeshetünk abba a csapdába, hogy a különböző környezeti beállítások miatt más végrehajtási tervet kapunk, mint amivel a tényleges OWB futtatás történik.

Az előző lekérdezésben kapott sql_id – t mint paramétert felhasználva hívom meg az alábbi parancsfájlt:


set pages 0;
set linesize 300;
column plan_table_output format a200;

select t.plan_table_output
from table(dbms_xplan.display_cursor('&sql_id')) t;

PL/SQL Developer – t használva ez a folyamat makrók segítségével automatizálható is, így könnyedén, bármikor ellenőrizni tudom a feldolgozásaim végrehajtási terveit, szükség esetén be tudok avatkozni.

Nincsenek megjegyzések:

Megjegyzés küldése