Personvern & Informasjonskapsler
dette nettstedet bruker informasjonskapsler. Ved å fortsette godtar du bruken av dem. Lær mer, inkludert hvordan du kontrollerer informasjonskapsler.
denne artikkelen er en del Av Oracle Performance Tuning-Serien og er laget for å beskrive oracles låsemekanisme.
en lås er en ressurs som du må holde for å få tilgang til ressursen. Oracle har to slags låser: enqueues og låser, vi vil nå fokusere på disse låsemekanismen individuelt.
Enqueues
Enqueues er sofistikerte låser for å administrere tilgang til delte ressurser(som tabeller, rader, jobber, gjenta tråder). En enqueue kan bli forespurt i ulike nivåer / modus:
- Null
- Raddeling
- eksklusiv rad
- Del
- Eksklusiv rad
hvis en økt inneholder enqueue i delingsmodus, kan andre økter også ta enqueue i delingsmodus (for samme ressurs). Hvis en økt har en enqueue i eksklusiv modus, må andre økter som ønsker å få det – uavhengig på hvilket nivå – de må vente.
når tilgang kreves av en økt, oppnås en låsestruktur, og det gjøres en forespørsel om å skaffe tilgang til ressursen på et bestemt nivå (modus). Låsestrukturen er plassert på en av tre koblede lister som henger ut av ressursen, kalt EIEREN (hvis enqueue kunne bli anskaffet), SERVITØR (hvis økten venter på å skaffe enqueue) og OMFORMER (økten holder enqueue på ett nivå, men ønsker å konvertere den til en annen) lister.
Følgende er noen vanlige typer enqueues:-
- TM-Hver gang en økt ønsker å låse en tabell, er en TM enqueue forespurt. Hvis en økt sletter en rad i den overordnede tabellen, og det opprettes en referansebegrensning (sekundærnøkkel) uten en indeks i den underordnede tabellen, eller hvis økten oppdaterer kolonnen(e) som sekundærnøkkelen refererer til, tas en delingslås i den underordnede tabellen. Hvis en annen økt prøver å gjøre endringer i barnebordet, må de vente (fordi de vil ha enqueue i row exclusive-modus, og det er ikke kompatibelt med delingsmodus).
- TX – SÅ snart en transaksjon er startet EN TX enqueue er nødvendig. En transaksjon er unikt definert av tilbakeføringssegmentnummeret, spornummeret i tilbakeføringssegmentets transaksjonstabell og spornummerets sekvensnummer. En økt kan vente PÅ EN TX enqueue av flere grunner:
- En annen økt låser den forespurte raden
- når to økter prøver å sette inn den samme unike nøkkelen i et bord (ingen av dem har GJORT EN FORPLIKTELSE), venter den siste økten på den første TIL Å BEGÅ eller RULLE TILBAKE.
- DET er ingen GRATIS ITL (Interessert Transaksjonsliste) i blokkhodet.
- UL-a-sesjonen har tatt en lås med DBMS_LOCK.BE om funksjon.
Låsene
Låsene gir et lavt nivå serialisering mekanisme beskytte delte datastrukturer I SGA. En lås er en type lås som kan kjøpes veldig raskt og frigjøres. Låsene brukes vanligvis til å hindre at mer enn en prosess fra å utføre samme stykke kode på et gitt tidspunkt. Når en lås er anskaffet, blir den anskaffet på et bestemt nivå for å forhindre vranglås. Når en prosess oppnår en lås på et visst nivå, kan den ikke senere skaffe seg en lås på et nivå som er lik eller mindre enn det nivået (med mindre det kjøper det nowait). Tilknyttet hver lås er en oppryddingsprosedyre som vil bli kalt hvis en prosess dør mens du holder låsen. Denne rengjøringen gjøres ved hjelp av PMONS tjenester. Den underliggende implementeringen av låser er operativsystemavhengig, spesielt med hensyn til om en prosess vil vente på en lås og hvor lenge.
målet med låsene er å administrere samtidig tilgang til delte datastrukturer slik at bare en prosess kan få tilgang til strukturen om gangen. Blokkerte prosesser (prosesser som venter på å utføre en del av koden som en lås allerede er oppnådd av en annen prosess) vil vente til låsen slippes ut. Oracle bruker atomiske instruksjoner som «test og sett» for å operere på låser. Siden instruksjonene for å sette og frigjøre låser er atomiske, GARANTERER OS at bare en prosess får det, og fordi det bare er en enkelt instruksjon, er det ganske fort.
Latch forespørsler kan gjøres i to moduser:
- villig til å vente: en» villig til å vente » -modus forespørsel vil sløyfe, vente og be om igjen til låsen er oppnådd.
- ingen vent: i» ingen vent » – modus vil prosessen be om låsen, og hvis den ikke er tilgjengelig, i stedet for å vente, blir det bedt om en annen. Bare når alle mislykkes, må serverprosessen vente.
Forskjell Mellom Låser & Enqueues
en forskjell mellom en lås og en enqueue er at enqueue oppnås ved hjelp AV EN OS-spesifikk låsemekanisme mens en lås oppnås uavhengig AV OPERATIVSYSTEMET. En enqueue tillater brukeren å lagre en verdi i låsen (dvs.modusen der vi ber om det). OS lock manager holder styr på ressursene låst. HVIS en prosess ikke kan gis til låsen fordi den er inkompatibel med den forespurte modusen og låsen blir bedt om med vent, setter OS den forespurte prosessen på en ventekø som betjenes I FIFO.
En annen forskjell mellom låser og enqueues er at enqueues opprettholde og bestilt kø av servitører mens låsene ikke. Alle prosesser venter på en klinke samtidig prøv på nytt (avhengig av planleggeren). Dette betyr at noen av servitører kan få låsen og tenkes den første som forsøker å få låsen kan være den siste til å faktisk få det. Latch servitører kan enten bruke timere til å våkne opp og prøve på nytt, eller de kan spinne (bare i multiprosessorer) som spinner på en lås betyr å holde CPU og vente i påvente av at låsen blir frigjort på kort tid).