Oracle reteszelő mechanizmus-reteszek és Enqueues

X

Adatvédelem & cookie-k

ez az oldal cookie-kat használ. A folytatással elfogadja azok használatát. Tudj meg többet, beleértve a cookie-k kezelésének módját is.

Megvan!

Advertisements

ez a cikk az Oracle Performance Tuning sorozat része, és az Oracle zárolási mechanizmusának leírására készült.

a zárolás olyan erőforrás, amelyet meg kell tartania az erőforráshoz való hozzáféréshez. Az Oracle-nek kétféle zárja van: enqueues és retesz, most külön-külön ezekre a reteszelő mechanizmusokra összpontosítanánk.

Enqueues

az Enqueues kifinomult zárak a megosztott erőforrásokhoz való hozzáférés kezelésére (például táblázatok, sorok, feladatok, redo szálak). Egy enqueue lehet kérni a különböző szinteken / módban:

  • Null
  • row share
  • row exclusive
  • Share
  • Share row exclusive
  • Share row exclusive
  • Exclusive

enqueue megosztás módban (ugyanazon erőforráshoz). Ha egy munkamenet exkluzív módban tart egy enqueue-t, akkor más munkamenetek, amelyek meg akarják szerezni – függetlenül attól, hogy melyik szinten – várniuk kell.

ha egy munkamenetnek hozzáférésre van szüksége, zárolási struktúrát kap, és egy kérés érkezik az erőforráshoz való hozzáférés megszerzésére egy adott szinten (mód). A zárszerkezet a három összekapcsolt lista egyikére kerül, amelyek lefagynak az erőforrásról, az úgynevezett tulajdonos (ha az enqueue megszerezhető), pincér (ha a munkamenet az enqueue megszerzésére vár) és átalakító (a munkamenet az enqueue-t egy szinten tartja, de át akarja alakítani egy másikra) listák.

az alábbiakban néhány gyakori típusú enqueues:-

  • TM-minden alkalommal, amikor egy munkamenet le akar zárni egy asztalt,egy TM enqueue-t kér. Ha egy munkamenet töröl egy sort a szülőtáblából, és hivatkozási kényszert (idegen kulcsot) hoz létre index nélkül a gyermektáblán, vagy ha a munkamenet frissíti azokat az oszlopokat, amelyekre az idegen kulcs hivatkozik, akkor megosztási zárolás történik a gyermektáblán. Ha egy másik munkamenet megpróbálja megváltoztatni a gyermektáblát, akkor várnia kell (mert az enqueue-t exkluzív sorban akarják, és ez nem kompatibilis a megosztási móddal).
  • TX – A tranzakció elindításakor TX enqueue-ra van szükség. A tranzakciót egyedileg határozza meg a visszagörgetési szegmens száma, a visszagörgetési szegmens tranzakciós táblázatában szereplő résidő, valamint a résidő sorszáma. Egy munkamenet több okból is várhat egy TX enqueue-n:
    1. egy másik munkamenet lezárja a kért Sort
    2. amikor két munkamenet megpróbálja beilleszteni ugyanazt az egyedi kulcsot egy táblázatba (egyikük sem tett elkövetést), akkor az utolsó munkamenet az első elkövetésére vagy VISSZAGÖRGETÉSÉRE vár.
    3. a blokk fejlécében nincs szabad ITL (Interested Transaction List).
  • UL-a munkamenet lezárta a DBMS_LOCK – ot.Kérés funkció.

a reteszek

a reteszek alacsony szintű sorosítási mechanizmust biztosítanak az SGA megosztott adatstruktúráinak védelme érdekében. A retesz egy olyan típusú zár, amely nagyon gyorsan megszerezhető és felszabadítható. A reteszeket általában arra használják, hogy megakadályozzák, hogy egynél több folyamat végrehajtsa ugyanazt a kóddarabot egy adott időben. Amikor egy reteszt megszereznek, azt egy bizonyos szinten megszerzik a holtpontok megakadályozása érdekében. Miután egy folyamat megszerez egy reteszt egy bizonyos szinten, később nem szerezhet reteszt olyan szinten, amely egyenlő vagy annál kisebb (hacsak nem szerzi meg nowait). Az egyes reteszekhez egy tisztítási eljárás tartozik, amelyet akkor hívnak meg, ha egy folyamat meghal, miközben a reteszt tartja. Ez a tisztítás a PMON szolgáltatásaival történik. A reteszek mögöttes megvalósítása operációs rendszerfüggő, különös tekintettel arra, hogy egy folyamat vár-e egy reteszre és mennyi ideig.

a reteszek célja a megosztott adatstruktúrákhoz való egyidejű hozzáférés kezelése úgy, hogy egyszerre csak egy folyamat férhessen hozzá a struktúrához. A blokkolt folyamatok (olyan folyamatok, amelyek arra várnak, hogy végrehajtsák a kód egy részét, amelyhez valamilyen más eljárással már reteszt kaptak) megvárják, amíg a retesz kioldódik. Az Oracle olyan atomi utasításokat használ, mint a “test and set” a reteszek működtetéséhez. Mivel a reteszek beállítására és felszabadítására vonatkozó utasítások atomi jellegűek, az operációs rendszer garantálja, hogy csak egy folyamat kapja meg, és mivel ez csak egyetlen utasítás, elég gyors.

retesz kéréseket lehet tenni a két mód:

  • willing-to-wait : A “willing-to-wait” módú kérés hurok, várakozás, majd ismét kérés, amíg a reteszt meg nem kapjuk.
  • no wait: “no wait” módban a folyamat kérni fogja a reteszt, és ha nem áll rendelkezésre, várakozás helyett egy másikat kér. Csak akkor, ha minden sikertelen, a szerver folyamatnak várnia kell.

a reteszek közötti különbség & Enqueues

az egyik különbség a retesz és az enqueue között az, hogy az enqueue-t OS-specifikus reteszelő mechanizmussal, míg a reteszt az operációs rendszertől függetlenül kapjuk meg. Az enqueue lehetővé teszi a felhasználó számára, hogy egy értéket tároljon a zárban (azaz azt a módot, amelyben azt kérjük). Az OS lock manager nyomon követi a zárolt erőforrásokat. Ha egy folyamat nem adható meg a zárolásnak, mert nem kompatibilis a kért móddal, és a zárolást várással kérik, az operációs rendszer a kérési folyamatot egy várakozási sorba helyezi, amelyet a FIFO szolgáltat.

egy másik különbség a reteszek és az enqueues között az, hogy az enqueues fenntartja és megrendeli a pincérek sorát, míg a reteszek nem. Minden folyamat vár egy reteszt egyidejűleg újra (attól függően, hogy az ütemező). Ez azt jelenti, hogy bármelyik pincér megkaphatja a reteszt, és elképzelhető, hogy az első, aki megpróbálja megszerezni a reteszt, az utolsó, aki ténylegesen megkapja. A reteszelő pincérek időzítőket használhatnak az ébresztéshez és az újbóli próbálkozáshoz, vagy foroghatnak (csak multiprocesszorokban) a retesz forgatása azt jelenti, hogy a CPU-t tartják, és várakoznak arra számítva, hogy a retesz rövid idő alatt felszabadul).

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.