Ce este matura în InterBase și Firebird

Ce este matura, de fapt, și de ce este rulat în modul automat, începe să încetinească pentru un loc de muncă? Pentru cei care sunt noi la server, se pare ca „frână“ periodice, care apare în mod neașteptat să dureze ceva timp (până la câteva ore), și la fel de brusc dispar indiferent de curentul de sarcină (numărul de conexiuni și solicită ca acestea sunt efectuate ).

De fapt, diferența dintre numărul de tranzacții pot apărea în condiții foarte diferite, astfel încât o matura automată regulă și pornește în mod neașteptat. Pentru a scapa de astfel de neașteptate se recomandă instalarea de auto-matura 0 (gfix ​​db.gdb -housekeeping 0) și executați manual periodic matura (gfix ​​db.gdb -sweep), atunci când cel mai mic număr de conexiuni active, sau chiar și în modul „exclusiv“ .

De colectare a gunoiului este de două tipuri:
  1. Clasicul arhitecturi (până InterBase 6.0, în Yaffil și Firebird) și SuperClassic (Firebird 2.5, 3.0) - versiune gunoi eliminat de flux (fir), care a venit peste atunci când lectură versiune.
  2. Superserver (în InterBase 6.0 și mai mare, Firebird 2.5, 3.0) - atunci când detectează versiuni de gunoi de pe pagina (pentru citirea și actualizarea) acest lucru este semnalat de către colectorul de gunoi de debit (fir). Colectorul de gunoi colectează periodic gunoi pe paginile marcate.
Prima strategie conduce la un select (post-citit) încetinirea de colectare a gunoiului. A doua strategie conduce la întârziere de colectare a gunoiului ca atare - în special, pentru modificarea paginii colectorul de gunoi nu știe dacă el a fost sau nu deja în această pagină. Mai mult decât atât, serverul de flux (fir) de colectare a gunoiului la o încărcare ridicată intervale de timp rareori ajunge la locul de muncă, prin care o colectare a gunoiului se face mult mai mult decât pentru prima strategie (în Interbase SWEEP_YIELD_TIME configurație 7.x a introdus parametrul de întârziere pentru colectarea gunoiului atunci când detectarea n milisecunde. de asemenea, SWEEP_QUANTUM, care determină numărul de „căpușe“ CPU ocupat de colectorul de gunoi).
De asemenea, pentru a preveni colectarea gunoiului de fundal este actualizarea constantă și frecventă a acelorași pagini de date variabile - de îndată ce colectorul de gunoi ajunge la acesta, paginile se schimbă din nou, iar colectorul de gunoi trebuie să aștepte.
Și, bineînțeles, atunci când a doua strategie, de colectare a gunoiului poate avea loc pe termen nelimitat, chiar și după dezactivarea conexiunilor client, ceea ce face nesigur pentru a reporni serverul în acest moment.

Notă. Sub „repornirea serverului“ se referă la full-time sistem de operare repornire cu servicii de închidere forțată. În mod similar, includ aici apăsând butonul de resetare, opriți și așa mai departe. N. Acest lucru în sine poate duce la corupție de baze de date, în cazul în care în acest moment de lucru cu ea intens. Serviciul de oprire obișnuită sau aplicarea Firebird sau Interbase funcționează diferit, și colectarea gunoiului de orice fel (de fond, cooperativă sau matura) este încheiată în mod corect.

În Firebird 2.0 și mai mare pot fi controlate strategii de colectare a gunoiului. Pentru această configurație (firebird.conf) un GCPolicy parametru, care are 3 optiuni:
  1. fundal - colector de gunoi ruleaza ca un fundal, colectarea de fir separat de gunoi.
  2. cooperativă - colector de gunoi se execută într-un mod cooperativ, colectând coșul de gunoi imediat la citirea versiunilor „junk“
  3. combinat - colectorul de gunoi se execută într-un mod cooperativ, dar în cazul în care deșeurile nu pot fi colectate, unele dintre paginile „gunoi“, a semnalat colectorul de gunoi de fundal.
Serverul determină citit versiunea nedorită a înregistrării, sau este încă nevoie de cineva: versiuni sunt necesare în principal instantaneu de tranzacție. Odată ce acest lucru începe o tranzacție, acesta va reține numărul cel mai tânăr în prezent tranzacție activă. În consecință, toate versiunile create dintr-o astfel de tranzacție „minor“ la numărul de instantaneu poate genera o versiune în care instantaneul este interesat. Și această versiune a „junk“ nu sunt. Prin urmare, mai vechi instantaneu (dintre cele mai mici active la momentul lansării de astăzi a activa instantaneu) versiunea a înregistrărilor pot fi eliminate ca un gunoi și de mai sus - nr.

Din aceasta, este clar de ce matura duce la sistem semnificativ „frână“, fiind lansat in baza de date de orice dimensiune semnificativă. De exemplu, baza de date de 2 GB pe tehnica medie matura de funcționare manual (gfix ​​-sweep db.gdb) se desfășoară timp de 2,5 minute, modul single-utilizator (aceasta este baza, în cazul în care nu există nici o versiune de înregistrare, la toate. Dar, de colectare a gunoiului, desigur, duce la modificări pagini care urmează să fie scrise pe disc). Mai mult decât atât, din moment ce citesc toate paginile de date și cache-ul bazei de date de index este deplasat, de aceea, atunci când matura multiplayer încetinește performanța tuturor anchetelor.

Astfel, dacă avem în baza de date există o tranzacție anulat pe rollback (din nou, pentru care serverul este în imposibilitatea de a anula modificările de pe savepoints. Diferite versiuni ale serverului este o altă valoare, cum ar fi nu mai puțin de 60 de mii schimbat intrări), acest lucru înseamnă că fiecare tranzacție ulterioară va verifica versiunea cu privire la starea tranzacției pe lângă cele mai vechi. Și cu cât intervalul, pagina mai multe pagini de tranzacție de inventar (stocare starea tranzacției) va fi citit în cache-ul, și mai multe dintre aceste pagini vor fi stocate într-o „memorie locală“ un instantaneu al tranzacției.

Prin urmare, pur și simplu prin creșterea numărului de tranzacții de performanță se va degrada.

Acesta este de a reduce periodic distanța până la cel mai vechi a fost introdus în continuare, iar matura automat.

În plus: