Inhoudsopgave:
Video: Buffer Cache 2024
Oracle 12c databasebuffercache bevatten, is meestal het grootste gedeelte van de SGA. Het heeft gegevens die afkomstig zijn van de bestanden op schijf. Omdat toegang tot gegevens vanaf schijf langzamer is dan uit geheugen, is het enige doel van de databasebuffercache om de gegevens in het geheugen in de cache op te slaan voor snellere toegang.
De databasebuffercache kan gegevens van alle soorten objecten bevatten:
-
Tafels
-
Indexen
-
Gematerialiseerde weergaven
-
Systeemgegevens
In de zin databasebuffercache, verwijst de term buffer naar databaseblokken. Een databaseblok is de minimale hoeveelheid opslag die Oracle leest of schrijft. Alle opslagsegmenten die gegevens bevatten, bestaan uit blokken. Wanneer u gegevens van de schijf opvraagt, leest Oracle minimaal één blok.
Zelfs als u slechts één rij aanvraagt, worden waarschijnlijk veel rijen in dezelfde tabel opgehaald. Hetzelfde geldt als u één kolom in één rij aanvraagt. Oracle leest het hele blok, dat waarschijnlijk veel rijen heeft, en alle kolommen voor die rij.
Het is denkbaar dat als de tabel met afdelingen slechts tien rijen bevat, het hele item in het geheugen kan worden gelezen, zelfs als u de naam van slechts één afdeling aanvraagt.
Buffercachestatus in Oracle 12c
De Een blok in de buffer cache kan in een van de drie toestanden zijn: Gratis: Wordt momenteel niet gebruikt voor iets Vastgezet: Wordt momenteel geopend > Vuil: Blok is gewijzigd maar nog niet naar schijf geschreven Gratis blokken Het LRU-algoritme werkt in de buffercache iets anders dan in de gedeelde pool. Het scoort elk blok en vervolgens tijden hoe lang het is geweest sinds het werd geopend. Een blok krijgt bijvoorbeeld een punt telkens wanneer het wordt aangeraakt. Hoe hoger de punten, hoe kleiner de kans dat het blok uit het geheugen wordt verwijderd. Het moet echter vaak worden bekeken of de score neemt af. Een blok moet hard werken om in het geheugen te blijven als de concurrentie om geheugenbronnen hoog is. Door elk blok een score en een tijd te geven, voorkomt u dat dit soort situaties zich voordoen: aan het eind van de maand wordt aan een blok zwaar geraadpleegd voor rapporten.De score is hoger dan bij elk ander blok in het systeem. Dat blok is nooit meer toegankelijk. Het bevat daar geheugenverlies totdat de database opnieuw is opgestart of een ander blok uiteindelijk genoeg punten scoort om het te verslaan. Het tijdsonderdeel veroudert het erg snel nadat u het niet langer gebruikt. Vastgezette blokken vastgezet blok. Het blok is vergrendeld (of vastgezet) in de buffercache, zodat het niet uit de buffercache kan verouderen terwijl het Oracle-proces (dat vaak een gebruiker vertegenwoordigt) het opent. Vuile blokken vuile blok. Om ervoor te zorgen dat uw wijzigingen in database-uitschakelingen worden bijgehouden, moeten deze vuile blokken worden geschreven vanuit de buffercache naar schijf. De database geeft vuile blokken in een vuile lijst of een schrijfwachtrij. Je zou denken dat elke keer dat een blok wordt gewijzigd, het naar de schijf moet worden geschreven om verloren gegevens te minimaliseren. Dit is niet het geval - zelfs niet als er een commit is (wanneer u uw wijzigingen permanent opslaat)! Verschillende structuren helpen verloren gegevens te voorkomen. Bovendien heeft Oracle een gokprobleem. De systeemprestaties worden gecrawld als u blokken voor elke wijziging op schijf hebt geschreven. Om dit te bestrijden speelt Oracle de kansen dat de database waarschijnlijk niet zal falen en blokken naar schijf alleen in grotere groepen schrijft. Maak je geen zorgen; het is niet eens een risico tegen verloren gegevens. Oracle haalt momenteel de prestaties uit de database met de mogelijke kosten van een herstel dat later duurt. Omdat storingen op goed beheerde systemen zelden voorkomen, is dit een goedkope manier om prestaties te behalen. Het is echter niet zo dat Oracle overal vuile blokken laat liggen zonder zichzelf op te ruimen. Blokschrijftriggers in Oracle 12c De database krijgt een opdracht shutdown. Een volledig of gedeeltelijk controlepunt treedt op - dat is het moment waarop het systeem alle vuile buffers periodiek op schijf dumpt. Er is aan een door u ingestelde hersteltijddrempel voldaan; het totale aantal vuile blokken veroorzaakt een onacceptabele hersteltijd. Een gratis blok is nodig en er is geen blok gevonden na een bepaalde hoeveelheid zoeken. Bepaalde DDL-opdrachten (Data Definition Language). (DDL-opdrachten zijn SQL-instructies die objecten in een database definiëren.) Elke drie seconden. Andere redenen. Het algoritme is complex en u kunt niet zeker zijn van alle wijzigingen die optreden bij elke softwareversie. Het is een feit dat de database behoorlijk druk blijft om blokken te schrijven in een omgeving waar er veel veranderingen zijn.
Idealiter zijn gratis blokken beschikbaar wanneer u ze nodig hebt. Dat is waarschijnlijk niet het geval, tenzij je database zo klein is dat het hele ding in het geheugen kan passen.
Een blok dat momenteel wordt geopend, is een
Een gewijzigd blok is een
Wat triggert een blokschrijf en daarom een vies blok?