Innehållsförteckning:
Video: Grunderna i Företagsekonomi 2024
Oracle 12cs databasbuffertcache är typiskt den största delen av SGA. Den har data som kommer från filerna på disken. Eftersom tillgången till data från disken är långsammare än från minnet är databasbuffertens cache enbart avsikt att cache data i minnet för snabbare åtkomst.
Databasbuffertbufferten kan innehålla data från alla typer av objekt:
-
Tabeller
-
Indexer
-
Materialiserade vyer
-
Systemdata
I frasen databasbuffertcache avser termen buffert databasblock. Ett databasblock är den minsta mängd lagring som Oracle läser eller skriver. Alla lagringssegment som innehåller data består av block. När du begär data från en skiva läser Oracle minst ett block vid lägsta Oracle.
Även om du bara begär en rad, kommer många rader i samma tabell troligen att hämtas. Detsamma gäller om du begär en kolumn i en rad. Oracle läser hela blocket, som sannolikt har många rader och alla kolumner för den raden.
Det är möjligt att tänka på att om din avdelningstabell bara har tio rader, kan hela saken läsas i minnet även om du bara begär en avdelningens namn.
Buffertcache-status i Oracle 12c
Buffertcache styr vilka block som stannar beroende på tillgängligt utrymme och blockstatus (liknande hur den delade poolen bestämmer vad SQL ska stanna). Buffertcachen använder sin egen version av LRU-algoritmen.
Gratis:
-
Används för närvarande inte för något Pinned:
-
Aktuellt nås > Dirty: Block har ändrats men ännu inte skrivits till disk
-
Gratis block Idealiskt finns gratis block när du behöver dem. Men det är förmodligen inte fallet om inte din databas är så liten att det hela kan passa i minnet.
LRU-algoritmen fungerar lite annorlunda i buffertcachen än vad den gör i den delade poolen. Det poäng varje block och sedan gånger hur länge det har varit sedan det var tillgängligt. Ett block får till exempel en punkt varje gång den berörs.
Ju högre poäng, desto mindre sannolikt kommer blocket att spolas från minnet. Det måste dock nås ofta eller poängen minskar. Ett block måste arbeta hårt för att hålla sig i minnet om konkurrensen om minnesresurser är hög.
Ge varje block ett poäng och tid förhindrar att denna typ av situation uppstår: Ett block öppnas kraftigt i slutet av månaden för rapporter.Dess poäng är högre än något annat block i systemet. Det blocket är aldrig tillgängligt igen.
Det sitter där slösa minnet tills databasen startas om eller ett annat block äntligen gör tillräckligt med poäng för att slå ut det. Tidskomponenten ökar det mycket snabbt efter att du inte längre har tillgång till den.
Pinned blocks
Ett block som för närvarande är tillgängligt är ett
pinnat block.
Blokken är låst (eller fastspänd) i buffertcachen så att den inte kan åldras ur buffertens cache medan Oracle-processen (som ofta representerar en användare) åtkomst till den. Smutsiga block Ett modifierat block är ett
smutsigt block.
För att se till att dina ändringar hålls över databasavstängningar måste dessa smutsiga block skrivas från buffertens cache till disken. Databasen heter smutsiga block i en smutsig lista eller skrivkö. Du kanske tror att varje gång ett block ändras, ska det skrivas till disk för att minimera borttagna data. Detta är inte fallet - inte ens när det finns en commit
(när du sparar dina ändringar permanent)! Flera strukturer hjälper till att förhindra borttagna data. Dessutom har Oracle ett spelproblem. Systemprestanda skulle krypa om du skrev block till disk för varje modifikation. För att bekämpa detta spelar Oracle oddsen att databasen sannolikt inte kommer att misslyckas och skriver block till disk bara i större grupper. Oroa dig inte; det är inte ens en risk för borttagna data. Oracle hämtar prestanda från databasen
just nu
till en eventuell återhämtning som tar längre tid senare. Eftersom fel på ordentligt hanterade system sällan uppstår är det ett billigt sätt att få lite prestanda. Det är emellertid inte som om Oracle lämnar smutsiga block överallt utan att rengöra sig efter sig själv. Blockera skrivutlösare i Oracle 12c Vad triggar en blockskrivning och därmed ett smutsigt block?
Databasen utges avstängningskommando.
En fullständig eller partiell kontrollpunkt uppstår - det är då systemet periodiskt dumper alla smutsiga buffertar till disken.
-
En tröskel för återställningstiden, som ställts in av dig, är uppfylld; Det totala antalet smutsiga block ger en oacceptabel återhämtningstid.
-
Ett gratis block behövs och ingen finns efter en viss sökning.
-
Vissa kommandon för datadefinitionsspråket (DDL). (DDL-kommandon är SQL-satser som definierar objekt i en databas.)
-
Var tredje sekund.
-
Övriga skäl. Algoritmen är komplex, och du kan inte vara säker med alla de förändringar som uppstår med varje programversion.
-
Faktum är att databasen blir ganska upptagen skrivblock i en miljö där det finns många förändringar.