Privacy & Cookies
deze website maakt gebruik van cookies. Door verder te gaan, gaat u akkoord met het gebruik ervan. Meer informatie, waaronder het beheren van cookies.
dit artikel maakt deel uit van de Oracle Performance Tuning-Serie en is gemaakt om het vergrendelingsmechanisme van Oracle te beschrijven.
een vergrendeling is een bron die u moet vasthouden om toegang te krijgen tot de bron. Oracle heeft twee soorten sloten: enqueues en grendches, we zouden ons nu richten op deze vergrendeling mechanisme individueel.
Enqueues
Enqueues zijn geavanceerde vergrendelingen voor het beheren van toegang tot gedeelde bronnen (zoals tabellen, rijen, taken, redo threads). Een aanvraag kan worden aangevraagd in verschillende niveaus/modus:
- Null
- Row share
- Row exclusive
- share row exclusive
- Share row exclusive
- exclusief
als een sessie een enqueue in share-modus heeft, kunnen andere sessies de enqueue ook in share-modus (voor dezelfde bron) nemen. Als een sessie een enqueue in exclusieve modus heeft, moeten andere sessies die het willen krijgen – onafhankelijk in welk niveau – wachten.
wanneer toegang vereist is voor een sessie, wordt een slotstructuur verkregen en wordt een verzoek gedaan om toegang tot de bron te verkrijgen op een specifiek niveau (mode). De lock structuur wordt geplaatst op een van de drie gekoppelde lijsten die hangen af van de bron, genaamd de eigenaar (als de enqueue kan worden verworven), ober (als de sessie wacht op het verwerven van de enqueue) en CONVERTER (de sessie houdt de enqueue in een niveau, maar wil het converteren naar een ander) lijsten.
Hieronder volgen enkele veel voorkomende soorten onderzoeken:-
- TM – elke keer dat een sessie een tafel wil vergrendelen, wordt een TM enqueue gevraagd. Als een sessie een rij in de bovenliggende tabel verwijdert en er een referentiële beperking (vreemde sleutel) wordt gemaakt zonder een index op de onderliggende tabel, of als de sessie de kolom(s) bijwerkt waarnaar de buitenlandse sleutel verwijst, wordt er een share lock gemaakt op de onderliggende tabel. Als een andere sessie wijzigingen probeert aan te brengen in de child-table moeten ze wachten (omdat ze de enqueue in row exclusive-modus willen, en dat is niet compatibel met de share-modus).
- TX-zodra een transactie wordt gestart, is een TX-aanvraag nodig. Een transactie wordt uniek gedefinieerd door het nummer van het terugrolsegment, het slotnummer in de transactietabel van het terugrolsegment en het volgnummer van het slotnummer. Een sessie kan om verschillende redenen wachten op een TX enqueue:
- een andere sessie vergrendelt de gevraagde rij
- wanneer twee sessies dezelfde unieke sleutel in een tabel proberen in te voegen (geen van hen heeft een COMMIT gedaan), dan wacht de laatste sessie op de eerste om te committen of terug te draaien.
- er is geen gratis ITL (Interested Transaction List) in de block header.
- UL-een sessie heeft een lock genomen met de DBMS_LOCK.VERZOEKFUNCTIE.
grendels
grendels bieden een serialisatiemechanisme op laag niveau dat gedeelde datastructuren in de SGA beschermt. Een slot is een soort slot dat zeer snel kan worden verworven en bevrijd. Vergrendelingen worden meestal gebruikt om te voorkomen dat meer dan één proces van het uitvoeren van hetzelfde stuk code op een bepaald moment. Wanneer een klink wordt verworven, wordt het verworven op een bepaald niveau om vastlopen te voorkomen. Zodra een proces een klink op een bepaald niveau verwerft, kan het vervolgens geen klink verwerven op een niveau dat gelijk is aan of lager is dan dat niveau (tenzij het het nowait verwerft). Geassocieerd met elke latch is een opschoonprocedure die zal worden genoemd als een proces sterft terwijl het vasthouden van de latch. Deze reiniging wordt gedaan met behulp van de diensten van PMON. De onderliggende implementatie van grendels is afhankelijk van het besturingssysteem, in het bijzonder met betrekking tot de vraag of een proces zal wachten op een grendel en voor hoe lang.
het doel van latches is om gelijktijdige toegang tot gedeelde datastructuren te beheren, zodat slechts één proces tegelijkertijd toegang heeft tot de structuur. Geblokkeerde processen (processen die wachten om een deel van de code uit te voeren waarvoor een vergrendeling al is verkregen door een ander proces) zullen wachten tot de vergrendeling is vrijgegeven. Oracle gebruikt atomaire instructies zoals “test and set” voor het werken op sloten. Aangezien de instructies voor het instellen en vrij vergrendelen atomisch zijn, garandeert het besturingssysteem dat slechts één proces het krijgt en omdat het slechts een enkele instructie is, is het vrij snel.
Latch-verzoeken kunnen in twee modi worden gedaan:
- willing-to-wait: een “willing-to-wait” mode verzoek zal lus, wachten, en verzoek opnieuw totdat de latch is verkregen.
- no wait: In” no wait ” – modus zal het proces de vergrendeling opvragen en als deze niet beschikbaar is, wordt er in plaats van te wachten een andere gevraagd. Alleen als alles mislukt moet het serverproces wachten.
verschil tussen Sloten & aanvragen
een verschil tussen een vergrendeling en een aanvraag is dat de aanvraag wordt verkregen met behulp van een OS-specifiek vergrendelingsmechanisme, terwijl een vergrendeling onafhankelijk van het besturingssysteem wordt verkregen. Een enqueue stelt de gebruiker in staat om een waarde op te slaan in het slot (dat wil zeggen de modus waarin we het opvragen). De OS lock manager houdt bij welke bronnen zijn vergrendeld. Als een proces niet kan worden verleend aan de vergrendeling omdat het niet compatibel is met de gevraagde modus en de vergrendeling wordt gevraagd met wachten, plaatst het besturingssysteem het verzoek proces op een wachtrij die wordt onderhouden in FIFO.
een ander verschil tussen sloten en enqueues is dat enqueues een wachtrij van obers onderhouden en ordenen, terwijl sloten dat niet doen. Alle processen die wachten op een vergrendeling gelijktijdig opnieuw proberen (afhankelijk van de scheduler). Dit betekent dat een van de obers de klink zou kunnen krijgen en denkbaar de eerste die probeert om de klink te verkrijgen zou de laatste kunnen zijn om het daadwerkelijk te krijgen. Latch obers kunnen ofwel gebruik maken van timers om wakker te worden en opnieuw te proberen of ze kunnen draaien (alleen in multiprocessors) draaien op een latch betekent het vasthouden van de CPU en wachten in afwachting van die latch wordt bevrijd in een korte tijd).