Deze pagina is automatisch vertaald. Lees het Engelse origineel. English

IBSurgeon-bibliotheek

FirebirdSQL: interne bestanden, tijdelijke bestanden en omgevingsvariabelen

door Vasily Sidorov, 2 sep 2022, IBSurgeon

Ervaren Firebird DBA’s weten dat Firebird nogal wat schijfruimte nodig kan hebben om interne en tijdelijke bestanden op te slaan. De aanbevolen schijfruimte voor tijdelijke bestanden in een productiesysteem is 30-40 GB, maar voor systemen met hoge belasting kan dit meer zijn.

In dit artikel beschrijven we de soorten interne en tijdelijke Firebird-bestanden en bekijken we ook hoe ze worden opgeslagen en beheerd via configuratieparameters en omgevingsvariabelen van het besturingssysteem. Het artikel vervolgt een reeks artikelen en materialen gewijd aan het beheersen van de installatie en configuratie van Firebird.

Belangrijke opmerking van de Firebird-kernontwikkelaars:

Stel de omgevingsvariabele FIREBIRD_LOCK nooit, nooit, NOOIT in of wijzig deze - tenzij je HEEL GOED weet wat je doet.

Expliciete suggestie van het IBSurgeon-team:

Wijzig FIREBIRD_LOCK niet.

Voor andere tijdelijke bestanden - zie dit.

Interne bestanden in Firebird

Interne bestanden zijn bestanden die Firebird gebruikt om zijn interne bewerkingen uit te voeren. Deze bestanden mogen niet worden gewijzigd of aangeraakt door gebruikers of software van derden. De onderstaande informatie is uitsluitend ter referentie.

Het algemene naamgevingspatroon van interne bestanden

Firebird gebruikt intern het voorvoegsel fbNN_, waarbij NN kan zijn

  • het belangrijkste ODS-nummer (ON-Disk Structure) (ODS 12 voor Firebird 3.0, ODS 13 voor Firebird 4.0), d.w.z. het bestand begint met fb13.
  • NN kan het verkorte versienummer zijn - bijvoorbeeld kan het bestand beginnen met fb50.

Er kan ook het voorvoegsel fb_ zijn, dat ook wordt gebruikt voor tijdelijke bestanden.

Soorten interne bestanden in Firebird

Er zijn de volgende hoofdtypen interne bestanden in Firebird:

  1. fb_lock_ lockbestanden - bestanden die worden gebruikt door de Firebird-lockmanager
  2. fbNN_monitor_ bestanden met gegevens van monitoringtabellen
  3. fbNN_trace_ bestand met gegevens voor tracesessies
  4. fb_event_ bestand met opgeslagen buffers van events
  5. fb_user_mapping bestanden met gegevens van gebruikersmapping
  6. bestanden met interne gegevens voor tracesessies
  7. vlagbestanden (nul grootte)
  8. fb_repl_ replicatiebestanden

Laten we de interne Firebird-bestanden in detail bekijken.

Lockbestanden

Lockbestanden hebben het voorvoegsel fb_lock_. Ze worden gebruikt door de lockmanager van Firebird om de toegang tot objecten in de Firebird-database en tussen Firebird-instantie(s) te synchroniseren.

Lockbestanden worden gemaakt bij het openen van een databasebestand en verwijderd wanneer het wordt gesloten.

Standaard wordt het databasebestand gesloten wanneer de laatste verbinding wordt verbroken. Vanaf Firebird 3.0 is het mogelijk om een databasebestand open te houden in Firebird na het verbreken van de laatste verbinding met behulp van de LINGER-optie.

De startgrootte van het lockbestand wordt ingesteld door de parameter LockMemSize in firebird.conf. De werkende grootte verschilt afhankelijk van de architectuur: SuperServer gebruikt lockbestanden minder intensief dan Classic en SuperClassic. De typische grootte van de locktabel is ongeveer 30-50 MB, maar voor servers met duizenden verbindingen in Classic/SuperClassic kan de grootte van lockbestanden oplopen tot 2 GB. 2 GB is de implementatielimiet voor lockbestanden in standaard Firebird.

Bestanden met gegevens van monitoringtabellen

Vanaf versie 2.1 heeft Firebird monitoringtabellen. Deze tabellen worden niet in de database opgeslagen; monitoringgegevens worden op verzoek verzameld en bewaard in interne bestanden met het naamgevingspatroon fbNN_monitor_.

De grootte van bestanden met gegevens van monitoringtabellen hangt af van het aantal verbindingen en hun activiteit (transacties, statements, opgeslagen procedures, enz.). Ook hangt het aantal en de grootte van fb_NN_monitor_-bestanden af van het aantal verzoeken aan monitoringtabellen vanuit verschillende verbindingen (dit is een van de redenen waarom u MON$-tabellen niet voor niet-monitoringtaken moet gebruiken).

Bestanden met gegevens voor tracesessies

Het bestandsnaampatroon fbNN_trace_ bevat de link naar het actieve tracesessiebestand. Bestanden met het naamgevingspatroon fb_trace_ bevatten informatie over de tracesessie. Het is een soort buffer voor traceergegevens. De maximale grootte van het fb_trace-bestand wordt beperkt door de parameter MaxUserTraceLogSize in firebird.conf. Als deze buffer overvol raakt, wordt de trace automatisch onderbroken.

Bestand voor eventbuffers

Bestanden met het naamgevingspatroon fb_event_ zijn buffers waarin Firebird niet-afgeleverde events aan clienttoepassingen opslaat.

Bestanden met gebruikersmappinggegevens

Bestanden fb_user_mapping worden gebruikt om gebruikersmapping in Firebird-instanties te cachen.

Vlagbestanden

In POSIX gebruikt Firebird vlagbestanden met nul grootte - fb_guard, fb_init, fb_port_NUMBER. Deze bestanden worden gebruikt bij het opstarten van Firebird.

Replicatiebestanden

In Firebird 4 en HQbird bevatten bestanden fb_repl_ de interne gegevens voor de replicatieprocessen.

Locatie van interne bestanden

Standaard worden alle interne Firebird-bestanden opgeslagen in dezelfde map: op Windows is dit C:\ProgramData\firebird, op Linux - /tmp/firebird. Houd er rekening mee dat de map voldoende rechten moet hebben, zodat de Firebird-instantie daar bestanden kan maken en ermee kan werken!

Het is mogelijk om de locatie van de map met interne Firebird-bestanden te wijzigen door de omgevingsvariabele FIREBIRD_LOCK te definiëren, maar we raden dit niet aan.

LET OP: om databasecorruptie te voorkomen, moeten alle Firebird-processen die hetzelfde databasebestand openen met dezelfde FIREBIRD_LOCK werken. Maak deze variabele niet aan en gebruik de standaardlocaties.

Grootte van interne bestanden

In de praktijk is de totale grootte van interne Firebird-bestanden ongeveer 100-200 MB, tot maximaal 2 GB als bekend maximum.

Tijdelijke bestanden in Firebird

Tijdelijke bestanden worden door de Firebird-engine gemaakt om tijdelijke gegevens op te slaan die ontstaan als gevolg van gebruikersbewerkingen - bijvoorbeeld query’s met DISTINCT. Tijdelijke bestanden kunnen erg groot zijn in productiesystemen met hoge belasting, dus het is noodzakelijk voor een ervaren DBA om de soorten tijdelijke bestanden te herkennen en, indien nodig, de Firebird-configuratie aan te passen of schijfruimte toe te wijzen om tijdelijke bestanden op te slaan.

Locatie van tijdelijke bestanden in Firebird

Firebird maakt tijdelijke bestanden aan in de map die is opgegeven door de omgevingsvariabelen FIREBIRD_TMP, TEMP, TMP (in deze volgorde). Als dergelijke variabelen niet bestaan, worden tijdelijke bestanden gemaakt in C:\Temp op Windows of /tmp op Linux.

In de praktijk zien we op Windows Firebird-tijdelijke bestanden in C:\Windows\Temp (komt overeen met de omgevingsvariabele TEMP), op Linux in /tmp.

Soorten tijdelijke bestanden in Firebird

Er zijn de volgende tijdelijke bestanden (allemaal met het voorvoegsel fb_):

  1. fb_table_ tabelobjecten, inclusief maar niet beperkt tot tijdelijke tabellen
  2. fb_blob_ blobs en autonome transacties
  3. fb_undo_ undo-gegevens
  4. fb_recbuf_ gebruikt om tussentijdse gegevens in actieve query’s, virtuele tabellen, enz. te bewaren
  5. fb_merge_ gegevens voor hash-joins
  6. fb_sort_ sorteringen (voor query’s met DISTINCT/ORDER BY/GROUP BY en voor het maken/opnieuw maken van indexen)
  7. fb_tpc_ fb_tpc_-gegevens - vanaf v4, lijst van alle bekende transacties met bijbehorende commitnummers
  8. fb_snap_ gegevens voor - vanaf v4, lijst van alle actieve databasesnapshots

Hoe de locatie van tijdelijke bestanden wijzigen?

Voor Firebird-versies vóór 4 is het mogelijk om een specifieke map te definiëren voor tijdelijke bestanden van de typen 4-8 met de Firebird-configuratieparameter TempDirectories.

Voor Firebird 4 en hoger maakt de nieuwe configuratieparameter TempTableDirectory het mogelijk om een map op te geven voor tijdelijke tabellen van de typen 1-3. Deze kan worden ingesteld in firebird.conf en in databases.conf.

Omgevingsvariabelen voor Firebird

Firebird kan de volgende omgevingsvariabelen van het besturingssysteem gebruiken (indien gedefinieerd):

  • FIREBIRD map met Firebird-configuratiebestanden
  • FIREBIRD_LOCK map met interne bestanden
  • FIREBIRD_MSG map met het berichtenbestand (firebird.msg)
  • FIREBIRD_TMP map voor tijdelijke bestanden

In de praktijk is FIREBIRD_TMP de enige variabele die het zinvol is om te definiëren als u een goede reden heeft om tijdelijke bestanden op een specifieke niet-standaardlocatie op te slaan.

Houd er rekening mee dat als het pad in FIREBIRD_TMP ongeldig is (niet bestaat of onvoldoende rechten), dit zal leiden tot kritieke fouten die Firebird verhinderen om te werken.

Belangrijke opmerking van de Firebird-kernontwikkelaars:

Stel de omgevingsvariabele FIREBIRD_LOCK nooit, nooit, NOOIT in of wijzig deze - tenzij je HEEL GOED weet wat je doet.

Expliciete suggestie van het IBSurgeon-team:

Wijzig FIREBIRD_LOCK nooit. Deze informatie is uitsluitend ter referentie.

Voor andere tijdelijke bestanden - zie dit.

In plaats van een samenvatting: antwoord op de veelgestelde vraag

Veel DBA’s vragen zich af: moeten we een RAM-drive of tmpfs gebruiken om Firebird-interne en/of tijdelijke bestanden op te slaan?

Het korte antwoord is: Nee, stem de Firebird-configuratie beter af. Als u veel geheugen heeft, kunt u de waarde voor DefaultDBCachePages verhogen (alleen voor SuperServer) en TempCacheLimit verhogen (in versies 3+ staat Firebird toe om TempCacheLimit meer dan 2 GB te gebruiken).

Als u niet zeker weet welke waarden moeten worden gebruikt, gebruik dan de Firebird Configuration Calculator, die optimale en veilige configuraties maakt voor specifieke hardware/VM-parameters.

Het langere antwoord: Firebird is ontworpen om het grootste deel van tijdelijke en interne bestanden in het geheugen te bewaren, maar omdat er in de praktijk situaties zijn waarin tijdelijke objecten erg groot worden, heeft het ook het mechanisme om ze op de schijf op te slaan. Firebird gebruikt effectief OS-mechanismen (mmap, bestandssysteemcache, tijdelijke bestanden, enz.) om tijdelijke en interne bestanden in het geheugen te cachen wanneer dit mogelijk en redelijk is. Het afstemmen van Firebird moet eerst via de Firebird-configuratie gebeuren en daarna via het besturingssysteem (locatie van tijdelijke bestanden instellen, verschillende opties voor bestandscache-afstemming, enz.).

Video’s:

Presentatie over het afstemmen van geheugengebruik

Stel gerust vragen of stuur feedback naar [email protected]