Indholdsfortegnelse:
Video: Database Buffer Cache | Oracle DBA Tutorials for the Beginners | RR TECHNOSOFT 2025
Oracle 12c's database buffer cache er typisk den største del af SGA. Den har data, der kommer fra filerne på disken. Fordi adgang til data fra disken er langsommere end fra hukommelsen, er databasepuffervisens eneste formål at cache dataene i hukommelsen for hurtigere adgang.
Databasen buffer buffer cache kan indeholde data fra alle typer objekter:
-
Tabeller
-
Indekser
-
Materialiserede visninger
-
Systemdata
I sætningen databasebuffer cache refererer udtrykket buffer til databaser. En database blok er den mindste mængde lagring, som Oracle læser eller skriver. Alle lagringssegmenter, der indeholder data, består af blokke. Når du beder om data fra en disk, læser Oracle mindst en blok.
Selvom du kun anmoder om en række, vil mange rækker i samme tabel sandsynligvis blive hentet. Det samme gælder, hvis du anmoder om en kolonne i en 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 muligt at tænke, at hvis din afdelingsbord kun har ti rækker, kan hele sagen læses i hukommelsen, selvom du kun anmoder om en afdeling.
Buffertcache-tilstand i Oracle 12c
Bufferen cache styrer, hvilke blokke der skal opholde sig, afhængigt af ledig plads og blokstatus (ligesom den fælles pulje bestemmer, hvad SQL skal blive). Bufferbufferen bruger sin egen version af LRU-algoritmen.
Gratis:
-
Bruges i øjeblikket ikke til noget Pinned:
-
Aktuelt tilgængelig > Dirty: Blokken er blevet ændret, men endnu ikke skrevet til disk
-
Gratis blokke Ideelt set er der gratis blokke til rådighed, når du har brug for dem. Det er dog ikke tilfældet, medmindre din database er så lille, at det hele kan passe i hukommelsen.
LRU-algoritmen virker lidt anderledes i bufferbufferen end den gør i den fælles pool. Det scorer hver blok og så gange hvor længe det har været siden det blev åbnet. For eksempel får en blok et punkt hver gang det berøres.
Jo højere pointene er, desto mindre sandsynligt blokeres blokken fra hukommelsen. Det skal dog ofte nås, eller scoren falder. En blok skal arbejde hårdt for at være i hukommelse, hvis konkurrencen om hukommelsesressourcer er høj.
At give hver blok en score og tid forhindrer en sådan situation: En blok fås stærkt i slutningen af måneden til rapporter.Dens score er højere end nogen anden blok i systemet. Denne blok fås aldrig igen.
Det sidder der spildende hukommelse, indtil databasen genstartes, eller en anden blok endelig scorer nok point til at slå det ud. Tidskomponenten aldrer det meget hurtigt, når du ikke længere har adgang til det.
Pinned blocks
En blok, der i øjeblikket er tilgængelig, er en
spærret blok.
Blokken er låst (eller fastgjort) i bufferbufferen, så den kan ikke alder ud af bufferbufferen, mens Oracle-processen (ofte repræsenterer en bruger) får adgang til den. Beskidte blokke En ændret blok er en
beskidt blok.
For at sikre, at dine ændringer holdes på tværs af databasestop, skal disse beskidte blokke skrives fra bufferbufferen til disken. Databasen navngiver beskidte blokke i en beskidt liste eller skrivekø. Du tror måske, at hver gang en blok ændres, skal den skrives til disk for at minimere tabte data. Dette er ikke tilfældet - ikke engang når der er en commit
(når du gemmer dine ændringer permanent)! Flere strukturer hjælper med at forhindre tabte data. Desuden har Oracle et spilproblem. Systemets ydeevne ville kravle, hvis du skrev blokke til disk for hver ændring. For at bekæmpe dette spiller Oracle oddsene, at databasen ikke sandsynligvis vil mislykkes og skriver blokke til disk kun i større grupper. Bare rolig; det er ikke engang en risiko mod tabte data. Oracle får ydeevne ud af databasen
lige nu
på den mulige bekostning af et opsving, der tager længere tid senere. Fordi fejl på ordentligt styrede systemer sjældent forekommer, er det en billig måde at opnå en vis ydeevne på. Det er imidlertid ikke som om Oracle efterlader snavse blokke hele tiden uden at rydde op efter sig selv. Bloker skrive udløsere i Oracle 12c Hvad udløser en blokskrivning og derfor en beskidt blok?
Databasen udstedes en shutdown-kommando.
Der opstår et fuldt eller delvis kontrolpunkt - det vil sige når systemet periodisk dumper alle de beskidte buffere til disken.
-
En gendannelsestidstærskel, der er fastsat af dig, er opfyldt; Det samlede antal snavsede blokke forårsager en uacceptabel opsvingstid.
-
Der kræves en gratis blok, og ingen findes efter en given mængde søgning.
-
Visse data definition sprog (DDL) kommandoer. (DDL-kommandoer er SQL-sætninger, der definerer objekter i en database.)
-
Hvert tredje sekund.
-
Andre grunde. Algoritmen er kompleks, og du kan ikke være sikker på alle de ændringer, der opstår med hver softwareudgivelse.
-
Faktum er, at databasen forbliver ret travlt med at skrive blokke i et miljø, hvor der er mange ændringer.