Yksityisyys & evästeet
tämä sivusto käyttää evästeitä. Jatkamalla hyväksyt niiden käytön. Lue lisää, mukaan lukien evästeiden hallinta.
tämä artikkeli kuuluu Oracle Performance Tuning-sarjaan ja on luotu kuvaamaan Oraclen lukitusmekanismia.
lukko on resurssi, jota pitää pitää, jotta pääsee käsiksi resurssiin. Oracle on kahdenlaisia lukot: enqueues ja salvat, olisimme nyt keskittyä näihin lukitusmekanismi erikseen.
tiedustelut
tiedustelut ovat kehittyneitä lukkoja, joilla hallitaan pääsyä yhteisiin resursseihin (kuten taulukoihin, riveihin, töihin, uudelleen kierteisiin). Tiedustelu voidaan pyytää eri tasoilla/tilassa:
- Null
- rivi-osake
- rivi-yksinoikeus
- osake
- osake-yksinoikeus
- osake-yksinoikeus
- yksinoikeus
jos istunnossa on tiedustelu osaketilassa, myös muut istunnot voivat enqueue jakotilassa (samalle resurssille). Jos istunto pitää enqueue eksklusiivisessa tilassa, muut istunnot, jotka haluavat saada sen-itsenäisesti millä tasolla-ne joutuvat odottamaan.
kun istunto vaatii pääsyä, saadaan lukkorakenne ja pyydetään resurssin käyttöoikeutta tietyllä tasolla (tilassa). Lukkorakenne on sijoitettu johonkin kolmesta linkitetystä listasta, jotka roikkuvat resurssista, joita kutsutaan omistajaksi (jos tiedustelu voidaan hankkia), tarjoilijaksi (jos istunto odottaa tiedustelun hankkimista) ja muunnin (istunto pitää tiedustelun yhdellä tasolla, mutta haluaa muuntaa sen toiselle) listoille.
Seuraavassa on joitakin yleisiä kyselytyyppejä:-
- TM-aina kun istunto haluaa lukita pöydän, pyydetään TM-kyselyä. Jos istunto poistaa rivin vanhempaintaulukosta ja luo viittausrajoituksen (ulkomainen avain) ilman hakemistoa lapsi-taulukossa, tai jos istunto päivittää saraketta(sarakkeita), johon vieras avain viittaa, lapsi-taulukkoon tehdään jakolukitus. Jos toinen istunto yrittää tehdä muutoksia lapsitaulukkoon, heidän on odotettava (koska he haluavat enqueue: n rivillä yksinoikeudella, ja se ei ole yhteensopiva jakotilan kanssa).
- TX – heti kun liiketoimi on aloitettu, tarvitaan TX-kysely. Transaktio määritellään yksikäsitteisesti rullaussegmentin numerolla, rullaussegmentin tapahtumataulukossa olevalla korttipaikkanumerolla ja korttipaikan numeron järjestysnumerolla. Istunto voi odottaa TX-kyselyssä useista syistä:
- toinen istunto lukitsee pyydetyn rivin
- , kun kaksi istuntoa yrittää lisätä samaa ainutlaatuista avainta taulukkoon (yksikään niistä ei ole tehnyt toimitusta), sitten viimeinen istunto odottaa ensimmäistä toimitusta tai palautusta.
- lohkon otsikossa ei ole vapaata ITL: ää (kiinnostuneiden tapahtumien lista).
- UL-istunto on ottanut Lukko kanssa DBMS_LOCK.Pyyntö toiminto.
Salvat
Salvat tarjoavat matalan tason sarjatuotantomekanismin, joka suojaa SGA: n jaettuja tietorakenteita. Salpa on lukon tyyppi, joka voidaan hyvin nopeasti hankkia ja vapauttaa. Salvat käytetään tyypillisesti estämään useampaa kuin yhtä prosessia suorittamasta samaa koodinpätkää tiettynä aikana. Kun salpa hankitaan, se hankitaan tietyllä tasolla umpikujien estämiseksi. Kun prosessi hankkii salvan tietyllä tasolla, se ei voi myöhemmin hankkia salvaa tasolla, joka on yhtä suuri tai pienempi kuin tämä taso (ellei se Hanki sitä nyt). Liittyy kunkin salpa on puhdistus menettely, joka kutsutaan, jos prosessi kuolee samalla salpa. Puhdistus tapahtuu pmon-palvelun avulla. Salvien taustalla oleva toteutus on käyttöjärjestelmäriippuvainen erityisesti sen suhteen, odottaako prosessi salvaa ja kuinka kauan.
salvien tavoitteena on hallita samanaikaista pääsyä jaettuihin tietorakenteisiin siten, että vain yksi prosessi voi käyttää rakennetta kerrallaan. Estetty prosessit (prosessit odottavat suorittaa osa koodia, jolle salpa on jo saatu jonkin muun prosessin) odottaa, kunnes salpa on vapautettu. Oracle käyttää atomisia ohjeita, kuten ”test and set”, toimiessaan salvoilla. Koska asetusohjeet ja vapaat salvat ovat atomisia, käyttöjärjestelmä takaa, että vain yksi prosessi saa sen ja koska se on vain yksi ohje, se on melko nopea.
Salpapyynnöt voidaan tehdä kahdessa tilassa:
- willing-to-wait:” willing-to-wait ” – tilapyyntö silmukoi, odota ja pyydä uudelleen, kunnes salpa on saatu.
- no wait:” no wait ” – tilassa prosessi pyytää salvan ja jos sitä ei ole saatavilla, odottamisen sijaan pyydetään toinen. Vain kun kaikki epäonnistuvat ei palvelimen prosessi on odotettava.
salvan ero & tiedustelut
yksi ero salvan ja tiedustelun välillä on se, että salpa saadaan käyttöjärjestelmälle ominaisella lukitusmekanismilla, kun taas salpa saadaan käyttöjärjestelmästä riippumattomalla lukitusmekanismilla. Tiedustelun avulla käyttäjä voi tallentaa arvon lukkoon (eli tilaan, jossa pyydämme sitä). Käyttöjärjestelmän lukituspäällikkö pitää kirjaa lukituista resursseista. Jos prosessia ei voida myöntää Lukolle, koska se on yhteensopimaton pyydetyn tilan kanssa ja Lukkoa pyydetään odottamaan, käyttöjärjestelmä asettaa pyytävän prosessin odotusjonoon, joka huolletaan FIFOSSA.
toinen ero salvien ja kyselyjen välillä on se, että kyselyissä pidetään yllä ja tilataan jonoa tarjoilijoita, kun taas salvat eivät. Kaikki prosessit odottavat salpa samanaikaisesti uudelleen (riippuen ajastimen). Tämä tarkoittaa, että joku tarjoilijat saattavat saada salpa ja mahdollisesti ensimmäinen yrittää saada salpa saattaa olla viimeinen todella saada se. Salpa tarjoilijat voivat joko käyttää ajastimia herätä ja yrittää uudelleen tai ne voivat spin (vain moniprosessorit) spinning salpa tarkoittaa pitämällä CPU ja odottaa ennakoiden, että salpa vapautuu lyhyessä ajassa).