Grundlæggende om Database Buffer Cache i Oracle 12c

Oracle 12c database buffer cache er typisk den største del af SGA. Det har data, der kommer fra filerne på disken. Fordi adgang til data fra disk er langsommere end fra hukommelsen, databasen buffer cache eneste formål er at cache data i hukommelsen for hurtigere adgang.

Databasen buffer cache kan indeholde data fra alle typer af objekter:

  • Tabeller
  • Indexes
  • Materialiserede visninger
  • System data

I udtrykket database buffer cache, udtrykket buffer refererer til database blokke. En database blok er den mindste mængde lagerplads, Oracle læser eller skriver. Alle storage segmenter, der indeholder data består af blokke. Når du anmoder om data fra disken, ved minimum Oracle læser en blok.

Selv hvis du anmoder om kun én række, mange rækker i samme tabel sandsynligvis skal hentes. Det samme gælder, hvis du anmoder om en kolonne i én række. Oracle læser hele blokken, som sandsynligvis har mange rækker, og alle kolonner for den pågældende række.

Det er realistisk at tro, at hvis din afdelinger tabel har kun ti rækker, kan hele ting læses ind i hukommelsen, selv om du anmoder navnet på kun én afdeling.

Buffer cache stat i Oracle 12c

Bufferen cache styrer hvad blokke får at bo afhængig af tilgængelig plads og blokken tilstand (svarer til, hvordan den fælles pool bestemmer, hvad SQL får at bo). Bufferen cache bruger sin egen version af den primære jernbanevirksomhed algoritmen.

En blok i bufferen cache kan være i en af ​​tre tilstande:

  • Gratis: Ikke i øjeblikket bruges til noget
  • Pinned: I øjeblikket får adgang
  • Dirty: Block er blevet ændret, men endnu ikke skrevet til disken

Gratis blokke

Ideelt set er til rådighed frie blokke, når du har brug for dem. Men det er sandsynligvis ikke tilfældet, medmindre din database er så lille, at det hele kan passe ind i hukommelsen.

Den primære jernbanevirksomhed algoritmen fungerer lidt anderledes i bufferen cache, end det gør i den fælles pool. Scorer hver blok og derefter gange hvor længe den har været, siden den blev åbnet. For eksempel kan en blok får et punkt, hver gang det er rørt.

Jo højere de punkter, vil mindre sandsynligt blokken skylles fra hukommelsen. Dog skal det tilgås ofte eller scoren falder. En blok har at arbejde hårdt for at blive i hukommelsen, hvis konkurrencen om hukommelse ressourcer er høj.

At give hver blok en score og tid forhindrer denne type situation opstår: En blok er adgang kraftigt i slutningen af ​​måneden for rapporter. Dens score er højere end nogen anden blok i systemet. Denne blok er aldrig adgang igen.

Den sidder der spilder hukommelse, indtil databasen genstartes eller en anden blok endelig scorer nok point til at slå den ud. Den tid komponent aldre det ud meget hurtigt efter du ikke længere adgang til den.

Fastgjorte blokke

En blok øjeblikket adgang er fastgjort blok. Blokken er låst (eller fastgjort) i buffer cache, så det ikke kan være fyldt ud af buffer cache mens Oracle processen (ofte repræsenterer en bruger) er adgang til det.

Dirty blokke

En modificeret blok er en beskidt blok. For at sikre, at dine ændringer bibeholdes i database nedlukninger, disse snavsede blokke skal skrives fra bufferen cache på disken. De databasenavne beskidte blokke i en beskidt liste eller skriv kø.

Du tror måske, at hver gang en blok er modificeret, skal det skrives til disk for at minimere tab af data. Dette er ikke tilfældet - heller ikke når der er en begå (når du gemmer dine ændringer permanent)! Adskillige strukturer til at forhindre tab af data.

Desuden Oracle har et spilleproblem. Systemets ydeevne ville kravle, hvis du skrev blokke til disken for hver ændring. For at bekæmpe dette, Oracle spiller odds, at databasen er usandsynligt at mislykkes, og skriver blokke til disk kun i større grupper.

Må ikke bekymre dig; det er ikke engang en risiko mod tab af data. Oracle er at få resultater ud af databasen lige nu på mulige bekostning af et opsving tager længere senere. Fordi fejl på korrekt styrede systemer sjældent opstår, det er en billig måde at få nogle resultater. Men det er ikke, som om Oracle efterlader snavsede blokke overalt uden at rydde op efter sig selv.

Block skrive udløser i Oracle 12c

Hvad udløser en blok skrive og derfor en beskidt blok?

  • Databasen er udstedt en shutdown kommando.
  • En hel eller delvis checkpoint opstår - det er, når systemet dumper periodisk alle de beskidte buffere til disk.
  • En restitutionstid tærskel, der fastsættes af dig, er opfyldt; det samlede antal af snavsede blokke forårsager en uacceptabel restitutionstid.
  • En fri blok er nødvendig, og ingen af ​​dem er fundet efter en given mængde søgning.
  • Visse datadefinition sprog (DDL) kommandoer. (DDL kommandoer er SQL-sætninger, der definerer objekter i en database.)
  • Hvert tredje sekund.
  • Andre årsager. Algoritmen er kompleks, og du kan ikke være sikker på med alle de forandringer, der sker med de enkelte software udgivelse.

Faktum er databasen forbliver temmelig optaget skrivning blokke i et miljø, hvor der er en masse ændringer.


© 2019 Zajacperrone.com | Contact us: webmaster# zajacperrone.com