2011. január 23., vasárnap

Parallel_enable opció alkalmazása PL/SQL függvényeknél

Az adattárházunk teljesítmény-hangolása közben sikerült kiszúrnom egy újabb apróságot. 10G R2 adatbázison dolgozunk, az egyik feldolgozásunkhoz szükségünk volt karakter aggregálásra, a group by csoportba tartozó szöveges mezők tartalmának összefűzésére. Ez az ORACLE-BASE cikk nagyon szépen összefoglalja milyen lehetőségeink vannak a probléma megoldására.

Mi az egyik legelterjedtebb megoldás választottuk, azt, hogy létrehozunk egy "user defined aggregate function" - t, melyben megadjuk hogyan kell a karakteres mezőt aggregálni. Ebben a megoldásban definiálni kell egy függvényt, amit a group by lekérdezéseinkben használhatunk. Ennek a definíciója valahogy így néz ki:

Create Or Replace Function SUM_VARCHAR2(pv_input Varchar2) Return Varchar2 parallel_enable Aggregate Using SUM_VARCHAR2_TYPE;

Mi elkövettük azt a hibát, hogy a definícióból véletlenül lemaradt a parallel_enable. Ennek következtében a feldolgozásunk átment soros végrehajtásba, és annak rendje és módja szerint lelassult.

A tapasztalat ebből annyi, hogy ha a végrehajtási tervben azt látjuk, hogy a feldolgozásunk egy része soros végrehajtásra fut, akkor célszerű ellenőrizni, hogy az általunk írt és felhasznált függvényeknél engedélyeztük - e a párhuzamos végrehajtást.

Nincsenek megjegyzések:

Megjegyzés küldése