Oracle låsemekanisme-låse & forespørgsler

privatliv&Cookies

denne side bruger cookies. Ved at fortsætte accepterer du deres brug. Lær mere, herunder hvordan du styrer cookies.

Fik Det!

annoncer

denne artikel er en del af Oracle Performance Tuning Series og er oprettet for at beskrive Oracle ‘ s låsemekanisme.

en lås er en ressource, som du skal holde for at få adgang til ressourcen. Oracle har to slags låse: forespørgsler og låse, vi vil nu fokusere på disse låsemekanismer individuelt.

forespørgsler

forespørgsler er sofistikerede låse til styring af adgang til delte ressourcer (som tabeller, rækker, job, gentag tråde). En forespørgsel kan anmodes om i forskellige niveauer / tilstand:

  • Null
  • række del
  • række eksklusiv
  • del række eksklusiv
  • del række eksklusiv
  • eksklusiv

hvis en session indeholder en forespørgsel i delingstilstand, kan andre sessioner også tage forespørgsel i delingstilstand (for den samme ressource). Hvis en session har en forespørgsel i eksklusiv tilstand, skal andre sessioner, der ønsker at få det – uafhængigt på hvilket niveau – de vente.

når adgang kræves af en session, opnås en låsstruktur, og der anmodes om at få adgang til ressourcen på et bestemt niveau (tilstand). Låsestrukturen er placeret på en af tre sammenkædede lister, der hænger ud af ressourcen, kaldet ejeren (hvis forespørgslen kunne erhverves), tjeneren (hvis sessionen venter på at erhverve forespørgslen) og konverteren (sessionen holder forespørgslen på et niveau, men ønsker at konvertere den til en anden) lister.

Følgende er nogle almindelige type forespørgsler:-

  • TM – hver gang en session ønsker at låse et bord, anmodes der om en TM-forespørgsel. Hvis en session sletter en række i overordnet tabel, og der oprettes en referencebegrænsning (fremmed nøgle) uden et indeks på underordnet tabel, eller hvis sessionen opdaterer den eller de kolonner, som den fremmede nøgle refererer til, tages der en delelås på underordnet tabel. Hvis en anden session forsøger at foretage ændringer i barnebordet, skal de vente (fordi de vil have forespørgslen i række eksklusiv tilstand, og det er ikke kompatibelt med delingstilstanden).
  • TKS – så snart en transaktion er startet, er der behov for en TKS-forespørgsel. En transaktion defineres entydigt af rollback-segmentnummeret, slotnummeret i rollback-segmentets transaktionstabel og slotnummerets sekvensnummer. En session kan vente på en forespørgsel af flere grunde:
    1. en anden session låser den ønskede række
    2. når to sessioner forsøger at indsætte den samme unikke nøgle i en tabel (ingen af dem har lavet en forpligtelse), så venter den sidste session på den første til at begå eller rulle tilbage.
    3. der er ingen gratis ITL (interesseret transaktionsliste) i blokhovedet.
  • UL-en session har taget en lås med DBMS_LOCK.Anmodning funktion.

låse

låse giver et lavt niveau serialiseringsmekanisme, der beskytter delte datastrukturer i SGA. En lås er en type lås, der meget hurtigt kan erhverves og frigøres. Låse bruges typisk til at forhindre mere end en proces i at udføre det samme stykke kode på et givet tidspunkt. Når en lås er erhvervet, erhverves den på et bestemt niveau for at forhindre deadlocks. Når en proces erhverver en lås på et bestemt niveau, kan den ikke efterfølgende erhverve en lås på et niveau, der er lig med eller mindre end dette niveau (medmindre det erhverver det nu). Tilknyttet hver lås er en oprydningsprocedure, der kaldes, hvis en proces dør, mens du holder låsen. Denne rengøring udføres ved hjælp af PMON ‘ s tjenester. Den underliggende implementering af låse er operativsystemafhængig, især med hensyn til, om en proces vil vente på en lås, og hvor længe.

målet med låse er at styre samtidig adgang til delte datastrukturer, således at kun en proces kan få adgang til strukturen ad gangen. Blokerede processer (processer, der venter på at udføre en del af koden, for hvilken en lås allerede er opnået ved en anden proces) vil vente, indtil låsen frigives. Oracle bruger atominstruktioner som” test and set ” til drift på låse. Da instruktionerne om at indstille og frigøre låse er atomare, garanterer operativsystemet, at kun en proces får det, og fordi det kun er en enkelt instruktion, er det ret hurtigt.

Latch anmodninger kan foretages i to tilstande:

  • villig til at vente: en” villig til at vente ” -anmodning vil sløjfe, vente og anmode om igen, indtil låsen er opnået.
  • ingen ventetid : i “ingen ventetid” – tilstand vil processen anmode om låsen, og hvis den ikke er tilgængelig, i stedet for at vente, anmodes der om en anden. Først når alt mislykkes, skal serverprocessen vente.

forskel mellem låse& forespørgsler

en forskel mellem en lås og en forespørgsel er, at forespørgslen opnås ved hjælp af en OS-specifik låsemekanisme, mens en lås opnås uafhængigt af operativsystemet. En forespørgsel giver brugeren mulighed for at gemme en værdi i låsen (dvs.den tilstand, hvor vi anmoder om det). OS lock manager holder styr på de låste ressourcer. Hvis en proces ikke kan tildeles låsen, fordi den er uforenelig med den ønskede tilstand, og låsen anmodes om med vent, sætter operativsystemet den anmodende proces i en ventekø, der serviceres i FIFO.

en anden forskel mellem låse og forespørgsler er, at forespørgsler opretholder og bestilles kø af tjener, mens låse ikke gør det. Alle processer, der venter på en lås, forsøger samtidigt igen (afhængigt af planlæggeren). Det betyder, at nogen af tjenerne kan få låsen og tænkeligt den første forsøger at få låsen kan være den sidste til rent faktisk at få det. Latch-tjenere kan enten bruge timere til at vågne op og prøve igen, eller de kan dreje (kun i multiprocessorer), der spinder på en lås, betyder at holde CPU ‘ en og vente i forventning om, at låsen frigøres på kort tid).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.