2014. szeptember 17., szerda

Function Result Cache

Bevezetés


Oracle Database 11g Release 1 óta létezik ez a feature, azonban ekkor még nem lehetett ezt az opciót használni, ha be akartuk állítani, hogy a hívó jogaival fusson (AUTHID értéke CURRENT_USER).

A Function Result Cache egy beépített cache megoldás a PL/SQL függvények eredményének (rendszer által managelt) gyorsítótárazására. Ezzel sok értékes időt és memória helyet lehet megspórolni. A function result cache az SGA-ban (Shared Global Area) tárolódik, ezért minden session eléri, amit az alkalmazás nyit. Beágyazott függvényen nem használható.

Működés


Amikor egy result cache függvény lefut, a rendszer ellenőrzi a cache-t, hogy létezik-e már ennek a függvénynek, ezekkel a paraméterekkel egy eredménye a gyorsítótárban. Egy függvény hívás többféle paraméter variációkkal hívható meg, ezeket külön elmenti. Ha a gyorsítótár tartalmaz eredményt, akkor azt adja vissza, és nem futtatja le újra a függvény törzset. Ellenkező esetben viszont lefut a függvény, az eredménye bekerül a gyorsítótárba a paraméter értékekkel együtt. Ha a memória megtelt, a régieket törli.

Az Oracle figyeli azokat a forrásokat (tábla, nézet), ami a result cache függvény használ, és ha valamelyikben változás történik(commit), a cache-ben tárolt eredmény érvénytelenné válik. 

Info A DETERMINISTIC opció megmondja az optimizernek, hogy ez ugyan azzal az értékkel tér vissza azonos paraméter hívások esetén. Ha  a függvény korábban meghívódott már az adott paraméterekkel, akkor az optimizer a korábbi eredményt használja, és nem futtatja le újra a függvény törzsét. Ez csak akkor használható, ha áll az, hogy mindig ugyan azt adja vissza azonos paraméter értékekkel. Ha változhat a visszatérési érték ugyanazon paraméterek mellett is, akkor a RESULT_CACHE-t kell használni.

Használata


A függvény deklarációban kell megadni a RESULT_CACHE kikötést.

Nézzük, mely esetekben fog lefutni egy result cache függvény body-ja
  • adott paraméterekkel első híváskor
  • ha az adott paraméterekkel invalid értékeket talál (megváltozott alatta az adat forrás)
  • ha az adott paraméterekkel gyorsítótárazott eredmények már törlődtek (elfogyott a hely a memóriában (aged delete))
  • vagy valamiért nem került bele a gyorsítótárba a korábbi eredmény
Lehetséges okok, amikor nem gyorsítótáraz a függvény
  • a cache átmenetileg elérhetetlen volt (pl.: Hot-Paching alatt az adminisztrátor kikapcsolta a result cache-t)
  • éppen egy DML művelet futott a táblán, ami a függvény függőségében van. Adott session nem használhatja a result cache-t, amíg egy DML művelet folyamatban van.


Nincsenek megjegyzések:

Megjegyzés küldése