Mi a söprés interbase és Firebird

Mi a söprés valójában, és miért automatikus módban fut, akkor lelassul a munkát? Azok számára, akik újak a szerverre, úgy néz ki, mint a rendszeres „fék”, hogy a váratlanul úgy tűnik, hogy bizonyos ideig (legfeljebb egy-két óra), majd hirtelen eltűnik, függetlenül az aktuális terhelés (kapcsolatok száma, és kéri, hogy azokat végre ).

Valójában a különbség a számok a tranzakciók mellett előfordulhat nagyon különböző körülmények között, hogy a szabály az automatikus söpörni, és elkezd váratlanul. Ahhoz, hogy megszabaduljon az ilyen váratlan ajánlatos telepíteni az automatikus söprés 0 (gfix ​​db.gdb -housekeeping 0) és manuálisan futtatni rendszeresen söpörni (gfix ​​db.gdb -sweep), amikor a legkisebb a kapcsolatok száma az aktív, vagy akár a „kizárólagos” módban .

Szemétgyűjtő két típusa van:
  1. A klasszikus architektúrák (amíg InterBase 6.0, a zöldharkály és Firebird) és SuperClassic (Firebird 2.5, 3.0) - változat szemetet eltávolítjuk a patak (menet), amely rábukkantam olvasásakor változata.
  2. A SuperServer (az InterBase 6.0 és újabb, Firebird 2.5, 3.0) - ha azt észleli változatai szemetet az oldalon (az olvasás és frissítése) ezt jelzi az áramlás (thread) szemétgyűjtő. A szemétgyűjtő rendszeresen gyűjt szemetet a kijelölt oldalakat.
Az első stratégia vezet a lassuló select (olvasni post) által szemétgyűjtés. A második stratégia vezet, hogy késleltesse szemétgyűjtés mint olyan - különösen a módosítás az oldal a szemétgyűjtő nem tudom, hogy ő volt-e vagy sem a már ezen az oldalon. Továbbá, az áramlás (menet) szemétgyűjtő szerver egy nagy terhelés időrések ritkán kap dolgozni, miáltal egy szemétgyűjtő végezzük sokkal hosszabb, mint az első stratégia (a InterBase 7.x konfigurációban SWEEP_YIELD_TIME bevezetett késleltetés paraméter szemétgyűjtő, amikor detektálás n milliszekundum. is SWEEP_QUANTUM, amely meghatározza a számát „kullancsok” CPU által elfoglalt a szemétgyűjtő).
Is, hogy megakadályozzák háttér szemétdíj állandó és gyakori frissítése ugyanazon változó adatokat tartalmazó lapokról - amint a szemétgyűjtő kap, akkor az oldalak ismét változott, és a szemétgyűjtő kell várni.
És persze, ha a második stratégia szemétgyűjtő kerülhet sor a végtelenségig, sőt letiltása után az ügyfél-csatlakozást, így nem biztonságos újraindítani a szervert ezen a ponton.

Megjegyzés. Az „a szerver újraindítására” kifejezés a teljes idejű operációs rendszer újraindítása a kényszerű leállítása szolgáltatásokat. Hasonlóképpen ide tartoznak a reset gomb, kikapcsolás és így tovább. N. Ez önmagában vezethet adatbázis korrupció, ha ebben a pillanatban dolgozik vele intenzíven. Szokásos stop szolgáltatás vagy a Firebird vagy InterBase alkalmazás eltérő módon működik, és a szemétgyűjtő bármilyen (háttér, szövetkezet vagy söprés) van lezárva.

A Firebird 2.0 és magasabb lehet szabályozni szemétgyűjtő stratégiákat. Erre a konfiguráció (firebird.conf) egy paramétert GCPolicy, amely 3 lehetőségek:
  1. háttér - a szemétgyűjtő fut, mint a háttér, gyűjtése szemetet külön téma.
  2. kooperatív - szemétgyűjtő fut egy kooperatív mód, gyűjtése a szemetet azonnal olvasása közben „szemét” változat
  3. Kombinált - a szemétgyűjtő fut egy kooperatív mód, de ha a hulladékot nem lehet gyűjteni, néhány „szemetet” oldalak jelezte a háttérben szemétgyűjtő.
A szerver meghatározza olvasni junk változata a rekord, vagy még valaki, szükséges: verzió van szükség a fő tranzakció pillanatkép. Miután ez elindít egy tranzakciót, emlékezik a legfiatalabb száma jelenleg aktív tranzakciót. Ennek megfelelően minden változatban létrehozott ilyen „kisebb” tranzakció számát a pillanatfelvétel generálhat egy változata, amelyben a pillanatfelvétel érdekel. És ez a verzió a „szemét” nem. Ezért az alábbiakban legrégebbit pillanatkép (a legkisebb aktív idején a dob ma az aktív snapshot) verzió a rekordok lehet eltávolítani, mint a szemét, és a fenti - nem.

Ebből világos, hogy miért a sweep vezet jelentős „fék” rendszer, indítanak az adatbázis bármely jelentős méretű. Például az adatbázis 2 GB átlagosan technikával kézzel fut söprés (gfix ​​-sweep db.gdb) fut 2,5 percig, egyfelhasználós módban (ez az alapja, ha nincs rekord verziók egyáltalán. De szemétgyűjtő természetesen vezet módosítások oldalak írva a lemezre). Továbbá, mivel olvasni az összes adat lapok és az index adatbázis cache elmozdul, ezért amikor a multiplayer söprés lassítja a teljesítményt az összes vizsgálatot.

Így, ha már az adatbázisban van egy tranzakció érvényteleníteni rollback (ismét, amelynek a kiszolgáló nem tudja helyrehozni a változások mentési pontok. Különböző változatai a szerver egy másik értéket, például nem kevesebb, mint 60 ezer megváltozott bejegyzések), ez azt jelenti, hogy minden további tranzakció verziójának ellenőrzése az állam a tranzakció mellett régebbi. És minél tovább az intervallum, annál több oldalt Tranzakciós Inventory oldal (tárolási tranzakció állapot) akkor olvashatók a cache, és a több ilyen oldalak lesznek tárolva a „helyi memória” pillanatkép a tranzakciót.

Ennek megfelelően, egyszerűen azáltal, hogy növeli a tranzakciók száma a teljesítménye romlik.

Meg időnként csökken a távolság akár régebbi Következő vezették be, és az automatikus sweep.

Ezen kívül: