Postgresql vákuum

A PostgreSQL egy úgynevezett MVCC (Multiversion konkurencia ellenőrzés), amely biztosítja, hogy minden tranzakció látja a leadott adatokat és azok olvasni ügyletek soha blokkolja adatok írási műveletet. és a rekord soha nem blokkolja az olvasást.

Ehhez az SQL parancsok UPDATE és DELETE végrehajtásakor a vonal tényleges törlése és módosítása soha nem következik be azonnal. Valójában, ha az UPDATE végrehajtása megtörténik, a string minden új verzióját létrehozza, de a régi verzió továbbra is létezik. A DELETE segítségével a vonal verziója csak egy adott tranzakcióval törölt, de nem törlődik.

Végül nincs élő tranzakció, amely láthatja a szöveg tartalmát. Ebben az esetben a karakterláncot törölhetjük, és helyét a sorok beillesztésekor megjelöltük. Ezt teszi a VACUUM.

A VACUUM parancsnak két lehetősége van: normál és FULL.

A szokásos opció csak a későbbi használatra utal, de az extrém esetben nem tér vissza az elfoglalt helyet az operációs rendszerhez, ha egy vagy több oldal a táblaterület végén teljesen ingyenes:

A leggyakrabban használt VACUUM. és a VACUUM FULL meghívható valamilyen eljárás után, ami nagyon aktívan frissíti az adatokat. A PostgreSQL-ben létezik egy standard démon, amely rendszeresen futtatja a VACUUM műveletet. amikor ez szükségessé válik.

Az MVCC arra a képességre támaszkodik, hogy összehasonlíthassa egy olyan tranzakciós verzió azonosítóját (XID), amely egy sorral illesztette az aktuális tranzakció XID-jét. Egy sor, hogy XID-hez, hogy fektessen nagyobb XID jelenlegi tranzakció került be a jövőben, és ezért nem lesz látható az aktuális tranzakciót. Tranzakció azonosító használnak 32 bites, így végrehajtásakor kellően nagyszámú tranzakciók (több mint négymilliárd) fordul elő az úgynevezett tranzakciós ID beburkoló. vagyis a Tranzakciók azonosítója ismét 0 lesz, és hirtelen minden múltbeli tranzakció a jövőben lesz, ami láthatóvá teszi a változásait.

Annak érdekében, hogy elkerüljük a tranzakcióazonosító érvényességét, legalább 1 milliárd tranzakció esetén legalább egyszer végre kell hajtani a VACUUM-ot minden adatbázisban.

Hogyan oldja meg a VACUUM parancs a problémát? A PostgreSQL-ben van egy speciális XID tranzakció FrozenXID. Ez az XID nem követi az azonosítók összehasonlításának szokásos szabályait, és mindig minden szokásos XID-nél régebbi. A gyakori XID-eket nem elsődleges számként, hanem ciklikusan hasonlítják össze. Minden XID van kétmilliárd XID-ek, amelyek régebbiek, mint két milliárd XID-s, ami újabb, ez egy tér-XID s zárva a gyűrűben. Miután létrehozta a karaktersorozatot néhány szokásos XID-vel, a karaktersorozat "a múltban" kétmilliárd újabb tranzakcióvá válik, tekintet nélkül az XID-ben szereplő számokra. Ha ez a sor még két milliárd tranzakció után is fennáll, akkor ez a jövőben megtörténik. Ennek elkerülése érdekében az XID vonalak régi verzióit FrozenXID-re kell állítani, mielőtt elérték a 2 milliárd tranzakció mérföldkövét. Kiosztása után ez a különleges XID, lesznek „a múltban”, hogy minden normális tranzakciókat, és ezért lesz érvényes, amíg az eltávolítás, nem számít, meddig fog történni. A FrozenXID hozzárendelését a VACUUM parancs végzi. ezért olyan fontos, hogy rendszeresen végrehajtják.

További bejegyzések ebből a kategóriából:

Kapcsolódó cikkek