Tudnivalók a gyorsítótár-találatokról

Ha a gyorsítótárazás engedélyezve van, a rendszer minden egyes lekérdezést kiértékel, hogy megállapítsa, hogy az gyorsítótár-találatnak számít-e.

A gyorsítótár-találat azt jelenti, hogy az Oracle Analytics Cloud a gyorsítótár használatával tudott válaszolni a lekérdezésre, és egyáltalán nem fordult az adatbázishoz. Az Oracle Analytics Cloud a lekérdezési gyorsítótár segítségével egyidejűleg ugyanazon vagy még magasabb szinten összesített lekérdezésekre tud válaszolni.

A gyorsítótári találatot számos tényező befolyásolja. Az alábbi táblázat ezeket a tényezőket ismerteti.

Tényező vagy szabály Leírás

A SELECT listában lévő oszlopok részhalmazának meg kell egyeznie

Az új lekérdezés SELECT listájában lévő összes oszlopnak léteznie kell a gyorsítótárbeli lekérdezésben, hogy megfeleljen egy gyorsítótár-találatnak, vagy pedig ki kel tudni számítani őket a lekérdezés oszlopaiból.

Ez a szabály leírja a gyorsítótár-találat elérésének minimális követelményét, de a szabály teljesítése nem garantálja, hogy lesz is találat a gyorsítótárban. A táblázatban található többi szabály is érvényes.

A SELECT listában szereplő oszlopoknak a gyorsítótárbeli lekérdezések oszlopaiban található kifejezéseket kell tartalmazniuk.

Az Oracle Analytics Cloud ki tudja számítani a kifejezéseket a gyorsítótárbeli eredmények alapján, hogy válaszoljon az új lekérdezésre, de minden oszlopnak szerepelnie kell a gyorsítótárbeli eredményben. Például a következő lekérdezés:

SELECT product, month, averageprice FROM sales WHERE year = 2000

gyorsítótári találatnak számít a következő lekérdezésnél:

SELECT product, month, dollars, unitsales FROM sales WHERE year = 2000

mert az averageprice értéke kiszámítható a dollars és a unitsales értékéből (averageprice = dollars/unitsales).

A WHERE utasításrész szemantikailag lehet ugyanaz vagy egy logikai részhalmaz

Ahhoz, hogy egy lekérdezést gyorsítótár-találatnak lehessen tekinteni, a WHERE utasításrész megszorításainak vagy egyenlőnek kell lenniük a gyorsítótárbeli eredményekkel, vagy a gyorsítótárbeli eredmények részhalmazával.

A WHERE utasításrész, ami egy gyorsítótárbeli lekérdezés logikai részhalmaza, akkor felel meg egy gyorsítótár-találatnak, ha a részhalmaz teljesíti az alábbi feltételek egyikét:

  • Az IN lista értékeinek részhalmaza. Azok a lekérdezések számítanak gyorsítótár-találatnak, amelyek egy IN lista gyorsítótárbeli lekérdezésének kevesebb elemét igénylik. Például a következő lekérdezés:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('EAST', 'WEST')

    találatnak számít a következő gyorsítótárbeli lekérdezésnél:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • Kevesebb (de ugyanolyan) OR megszorítást tartalmaz, mint a gyorsítótárbeli eredmény.

  • Egy literális összehasonlítás logikai részhalmazát tartalmazza. Például a következő predikátum:

    WHERE revenue < 1000

    gyorsítótár-találatnak számít a következő predikátumot tartalmazó, összehasonlítható gyorsítótárbeli lekérdezésnél:

    WHERE revenue < 5000
  • Nincs WHERE utasításrész. Ha egy WHERE utasításrészt nem tartalmazó lekérdezés gyorsítótárbeli, akkor az olyan lekérdezések, amelyek megfelelnek az összes többi gyorsítótár-találati szabálynak, a bennük lévő WHERE utasításrésztől függetlenül gyorsítótár-találatoknak számítanak.

Ezenkívül a WHERE utasításrészben használt oszlopoknak szerepelniük kell a kivetítési listában. Például a következő lekérdezés:

SELECT employeename
FROM employee, geography
WHERE region in ('EAST', 'WEST')

Nem eredményez gyorsítótár-találatot az előző listában szereplő feltöltött alaplekérdezésnél, mert a REGION nem szerepel a kivetítési listában.

A csak dimenziót tartalmazó lekérdezéseknek pontosan meg kell egyezniük.

Ha egy lekérdezés csak dimenziót tartalmaz, vagyis nem tartalmaz sem tényadatot, sem mérőszámot, akkor csak a gyorsítótárbeli lekérdezés kivetítési oszlopaival való pontos egyezés számít gyorsítótári találatnak. Ez a viselkedés megakadályozza a hamis pozitív eredmények megjelenését, amikor egy dimenziótáblához több logikai forrás tartozik.

A speciális függvényeket tartalmazó lekérdezéseknek pontosan meg kell egyezniük.

Más lekérdezéseknek, amelyek olyan speciális függvényeket tartalmaznak, mint például az idősori függvények (AGO, TODATE és PERIODROLLING), a korlátozási és eltolási függvények (OFFSET és FETCH), a kapcsolati függvények (ISANCESTOR, ISLEAF, ISROOT és ISSIBLING), a külső összesítő függvények és általában a szűrési mérőszámok, szintén pontosan meg kell egyezniük a gyorsítótárbeli lekérdezés kivetítési oszlopaival. Ezekben az esetekben a szűrőnek is pontosan meg kell egyeznie. A szűrő mérőszámainál, ha a szűrő mérőszáma átírható WHERE utasításrészként, akkor a gyorsítótárbeli részhalmazt lehet alkalmazni.

A logikai táblák készletének meg kell egyeznie

Ahhoz, hogy gyorsítótár-találatot érjünk el, az összes bejövő lekérdezésnek ugyanolyan logikai táblakészletet kell tartalmaznia, mint ami a gyorsítótári bejegyzés tartalmaz. Ez a szabály nem vonatkozik a hamis gyorsítótár-találatokra. Például a SELECT * FROM product és a SELECT * FROM product, sales nem egyeznek meg.

A munkameneti változók értékeinek meg kell egyezniük, beleértve a biztonsági munkameneti változókat is

Ha a logikai vagy a fizikai SQL-utasítás bármilyen munkameneti változóra hivatkozik, akkor a munkameneti változó értékeinek meg kell egyezniük. Ellenkező esetben nincs gyorsítótári találat.

Ezenkívül azon munkameneti változók értékének, amelyek biztonsági szempontból érzékenyek, meg kell egyezniük a biztonsági munkameneti változónak a szemantikai modellben definiált értékeivel, még akkor is, ha maga a logikai SQL-utasítás nem hivatkozik munkameneti változókra. Lásd: Pontos gyorsítótári eredmények biztosítása sorszintű adatbázis-biztonság használata esetén.

Egyenlő összekapcsolási feltételek

Egy új lekérdezési kérelem eredményül kapott összekapcsolt logikai táblájának meg kell egyeznie a gyorsítótárbeli eredményekkel (vagy azok részhalmazával) a gyorsítótár-találat eléréséhez.

A DISTINCT attribútumnak azonosnak kell lennie

Ha egy gyorsítótárbeli lekérdezés kiküszöböli az ismétlődő rekordokat a DISTINCT feldolgozással (például: SELECT DISTINCT...), akkor a gyorsítótárbeli oszlopokra vonatkozó kérelmeknek szintén tartalmazniuk kell a DISTINCT feldolgozást. Ha egy ugyanarra az oszlopra vonatkozó kérelem nem tartalmazza a DISTINCT feldolgozást, akkor az gyorsítótár-tévesztésnek számít.

A lekérdezéseknek kompatibilis összesítési szinteket kell tartalmazniuk

Azok a lekérdezések, amelyek összesített szintű adatokat igényelnek, alacsonyabb összesítési szinten is használhatják a gyorsítótárbeli eredményeket. Például a következő lekérdezés az eladott mennyiséget szállító, régió és város szinten igényli:

SELECT supplier, region, city, qtysold
FROM suppliercity

A következő lekérdezés az eladott mennyiséget város szinten igényli:

SELECT city, qtysold
FROM suppliercity

A második lekérdezés gyorsítótár-találatot eredményez az első lekérdezésnél.

Korlátozott kiegészítő összesítés

Például ha a qtysold oszlopot tartalmazó kérelmet feltöltenek a gyorsítótárba, akkor egy RANK(qtysold) iránti kérelem gyorsítótár-tévesztést eredményez. Ezenkívül, a qtysold adatokat ország szinten igénylő lekérdezés gyorsítótár-találatot kap attól a lekérdezéstől, amelyik a qtysold adatot ország és régió szinten igényli.

Az ORDER BY utasításrésznek a kiválasztási lista oszlopait kell tartalmaznia

A kiválasztási listában nem szereplő oszlopok szerint rendező lekérdezések gyorsítótár-tévesztéseket eredményeznek.

A gyorsítótár-találat viselkedésének diagnosztizálása

Ahhoz, hogy jobban tudja értékelni a gyorsítótár-találat viselkedését, állítsa be az ENABLE_CACHE_DIAGNOSTICS munkameneti változó értékét 4-re a következő példa szerint:

ENABLE_CACHE_DIAGNOSTICS=4