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ó.
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
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