Ugrás a fő tartalomra

Adatbázis statisztika és hisztogram

 Az Oracle statisztika és a histogram két különböző, de egymással összefüggő fogalom az Oracle adatbázisban.



📌 1. Statisztika (Statistics) – Általános adateloszlási információk

A statisztikák az Oracle Optimizer számára biztosítanak információkat a táblák, indexek és oszlopok szerkezetéről és méretéről. Ezek alapján az Optimizer dönt arról, hogy milyen végrehajtási tervet használjon egy SQL lekérdezéshez.

🔹 Milyen információkat tartalmaznak a statisztikák?

  • Sorok száma egy táblában (NUM_ROWS)
  • Blokkok száma (BLOCKS)
  • Átlagos sorhossz (AVG_ROW_LEN)
  • Distinct értékek száma (NUM_DISTINCT) egy oszlopban
  • Leggyakoribb érték (MOST_COMMON_VALUE)
  • Indexek információi (például B-Tree mélység)

🔹 Példa egy teljes statisztikai frissítésre

EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA_NAME', 'TABLE_NAME');

🎯 Mikor hasznos?

  • Ha az adatmennyiség változott (új rekordok, törlések, módosítások).
  • Az Optimizernek friss képre van szüksége a tábla állapotáról.

📌 2. Histogram – Adateloszlás finom részletezése

A histogram speciális statisztikai elemzés, amely egy oszlop értékeinek eloszlását írja le. Akkor van rá szükség, ha az adott oszlop adatai nem egyenletesen oszlanak el, és ezt az Optimizernek figyelembe kell vennie.

🎯 Mikor fontos?

  • Ha egy oszlopban néhány érték sokkal gyakoribb, mint a többi.
  • Ha egy oszlop adateloszlása nem egyenletes (pl. ritkán szereplő értékek).

🔹 Példa histogram készítésére egy adott oszlophoz

EXEC DBMS_STATS.GATHER_TABLE_STATS(
    ownname => 'SCHEMA_NAME',
    tabname => 'TABLE_NAME',
    method_opt => 'FOR COLUMNS column_name SIZE 10'
);


  • SIZE 10: Az Oracle 10 kategóriába osztja az értékeket, és megpróbálja pontosabban becsülni az adateloszlást.

🔹 Histogram típusok Oracle-ben

  1. Height-Balanced Histogram – Ha az oszlopban sok különböző érték van, és egyenlőtlen az eloszlás.
  2. Frequency Histogram – Ha az oszlopban kevés különböző érték van, és egyes értékek sokkal gyakoribbak.

🔹 Példa egy konkrét histogram lekérdezésére

Ha megnéznéd egy oszlop histogramját:

SELECT COLUMN_NAME, NUM_BUCKETS, HISTOGRAM FROM USER_TAB_COL_STATISTICS WHERE TABLE_NAME = 'TABLE_NAME';

  • NUM_BUCKETS: Az Oracle hány csoportba (bin) osztotta az adatokat.
  • HISTOGRAM: NONE, HEIGHT BALANCED vagy FREQUENCY típusú.



  • Fő különbségek a statisztika és a histogram között

    JellemzőStatisztikaHistogram
    CélÁltalános információ az adateloszlásrólRészletesebb eloszlási adatok az oszlopokhoz
    Milyen szinten működik?Táblák, indexek, oszlopokCsak oszlopok
    Milyen információkat tartalmaz?Sorok száma, különböző értékek száma, blokkok számaEgy oszlop értékeinek eloszlása
    Mikor hasznos?Ha az adatmennyiség változottHa az oszlopértékek egyenlőtlenül oszlanak el
    Hogyan készítjük el?GATHER_TABLE_STATS vagy GATHER_INDEX_STATSGATHER_TABLE_STATS METHOD_OPT opcióval


    📌 4. Példa, amikor a histogram befolyásolja az Optimizer döntését

    Tegyük fel, hogy van egy Customer tábla, amelyben az ország (COUNTRY) oszlop nagyon egyenlőtlenül oszlik el:

    • 90% USA
    • 5% Németország
    • 5% Egyéb országok

    Ha lefut egy ilyen lekérdezés:

    SELECT * FROM CUSTOMER WHERE COUNTRY = 'Germany';

    • Ha NINCS histogram, az Oracle feltételezheti, hogy minden ország nagyjából egyforma gyakoriságú, és rossz végrehajtási tervet választhat.
    • Ha VAN histogram, az Optimizer pontosan tudja, hogy csak az adatok 5%-át kell keresni, és ennek megfelelően gyorsabb végrehajtási tervet készít.


    📌 5. Összegzés – Mikor használjunk statisztikát és histogramot?

    🔹 Csak statisztikát használunk, ha a táblák és oszlopok adatai egyenletesen oszlanak el, és az Optimizernek csak az adatbázis struktúrájára vonatkozó általános információkra van szüksége.

    🔹 Histogramokat használunk, ha az oszlopban nagyon eltérő gyakoriságú értékek vannak, és az Oracle-nek pontosan tudnia kell, hogy mely értékek gyakoriak vagy ritkák.

    Ha a statisztikák nem naprakészek vagy hiányoznak, az SQL teljesítménye jelentősen romolhat. Ha pedig feleslegesen sok histogramot generálunk, az túlzott CPU és memóriahasználathoz vezethet.

    📢 Javaslat: A statisztikák karbantartását ütemezetten (Scheduler-rel) és csak szükség szerint kell elvégezni, histogramokat pedig csak a kritikus oszlopokhoz érdemes létrehozni, ahol az adateloszlás egyenetlen. 🚀



    Megjegyzések