Questa pagina è stata tradotta automaticamente. Leggi l'originale in inglese. English

Libreria IBSurgeon

FirebirdSQL: file interni, file temporanei e variabili d'ambiente

di Vasily Sidorov, 2 settembre 2022, IBSurgeon

Gli amministratori esperti di Firebird sanno che Firebird può richiedere una quantità piuttosto elevata di spazio su disco per memorizzare file interni e temporanei. La dimensione consigliata dello spazio su disco per i file temporanei in un sistema di produzione è di 30-40 GB, ma per sistemi ad alto carico può essere maggiore.

In questo articolo descriveremo i tipi di file interni e temporanei di Firebird e considereremo anche come vengono memorizzati e gestiti tramite parametri di configurazione e variabili d’ambiente del sistema operativo. L’articolo prosegue la serie di articoli e materiali dedicati alla padronanza di installazione e configurazione di Firebird.

Nota importante dagli sviluppatori del core di Firebird:

Mai, mai, MAI impostare/modificare la variabile d’ambiente FIREBIRD_LOCK - a meno che tu non sappia MOLTO bene cosa stai facendo.

Suggerimento esplicito dal team IBSurgeon:

Non modificare FIREBIRD_LOCK.

Per altri file temporanei - vedi questo.

File interni in Firebird

I file interni sono file utilizzati da Firebird per eseguire le sue operazioni interne. Questi file non devono essere modificati o toccati dagli utenti o da software di terze parti. Le informazioni seguenti sono solo di riferimento.

Il modello di denominazione comune dei file interni

Firebird utilizza internamente il prefisso fbNN_, dove NN può essere

  • il numero ODS (struttura su disco) principale (ODS 12 per Firebird 3.0, ODS 13 per Firebird 4.0), cioè il file inizia con fb13.
  • NN può essere il numero di versione abbreviato - ad esempio, il file può iniziare con fb50.

Inoltre, può esserci il prefisso fb_, utilizzato anche per i file temporanei.

Tipi di file interni in Firebird

Ci sono i seguenti tipi principali di file interni in Firebird:

  1. file di blocco fb_lock_ - file utilizzati dal gestore di blocco di Firebird
  2. file fbNN_monitor_ con dati delle tabelle di monitoraggio
  3. file fbNN_trace_ con dati per sessioni di traccia
  4. file fb_event_ con buffer memorizzati di eventi
  5. file fb_user_mapping con dati di mappatura utenti
  6. file con dati interni per sessioni di traccia
  7. file flag (dimensione zero)
  8. file di replica fb_repl_

Consideriamo i file interni di Firebird in dettaglio.

File di blocco

I file di blocco hanno il prefisso fb_lock_. Sono utilizzati dal gestore di blocco di Firebird per sincronizzare l’accesso agli oggetti all’interno del database Firebird e tra le istanze di Firebird.

I file di blocco vengono creati all’apertura di un file di database e cancellati alla chiusura.

Per impostazione predefinita, il file di database viene chiuso quando l’ultima connessione viene disconnessa. A partire da Firebird 3.0, è possibile mantenere aperto un file di database in Firebird dopo la disconnessione dell’ultima connessione utilizzando l’opzione LINGER.

La dimensione iniziale del file di blocco è impostata dal parametro LockMemSize in firebird.conf. La dimensione operativa varia a seconda dell’architettura: SuperServer utilizza i file di blocco in modo meno intensivo rispetto a Classic e SuperClassic. La dimensione tipica della tabella di blocco è di circa 30-50 MB, ma per server con migliaia di connessioni in Classic/SuperClassic la dimensione dei file di blocco può crescere fino a 2 GB. 2 GB è il limite di implementazione per i file di blocco in Firebird vanilla.

File con dati dalle tabelle di monitoraggio

A partire dalla versione 2.1, Firebird dispone di tabelle di monitoraggio. Queste tabelle non sono memorizzate all’interno del database; i dati di monitoraggio vengono raccolti su richiesta e conservati in file interni con il modello di nome fbNN_monitor_.

La dimensione dei file con dati delle tabelle di monitoraggio dipende dal numero di connessioni e dalla loro attività (transazioni, istruzioni, procedure memorizzate, ecc.). Inoltre, la quantità e la dimensione dei file fb_NN_monitor_ dipendono dal numero di richieste alle tabelle di monitoraggio da diverse connessioni (questo è uno dei motivi per cui non si dovrebbero usare le tabelle MON$ per attività non di monitoraggio).

File con dati per sessioni di traccia

Il modello di nome del file è fbNN_trace_ e mantiene il collegamento al file della sessione di traccia attiva. I file con il modello di nome fb_trace_ contengono informazioni sulla sessione di traccia. È una sorta di buffer per i dati di tracciamento. La dimensione massima del file fb_trace è limitata dal parametro MaxUserTraceLogSize in firebird.conf. Se questo buffer viene riempito, la traccia si sospenderà automaticamente.

File per buffer di eventi

I file con il modello di nome fb_event_ sono buffer in cui Firebird memorizza gli eventi non consegnati alle applicazioni client.

File con dati di mappatura utenti

I file fb_user_mapping vengono utilizzati per memorizzare nella cache le mappature degli utenti nelle istanze Firebird.

File flag

In POSIX, Firebird utilizza file flag con dimensione zero - fb_guard, fb_init, fb_port_NUMBER. Questi file vengono utilizzati all’avvio di Firebird.

File di replica

In Firebird 4 e HQbird i file fb_repl_ contengono i dati interni per i processi di replica.

Posizione dei file interni

Per impostazione predefinita, tutti i file interni di Firebird sono memorizzati nella stessa cartella: su Windows è C:\ProgramData\firebird, su Linux - /tmp/firebird. Si prega di notare che la cartella deve avere i permessi sufficienti, affinché l’istanza Firebird possa creare e lavorare con i file lì!

È possibile modificare la posizione della cartella con i file interni di Firebird definendo la variabile d’ambiente FIREBIRD_LOCK, ma non lo consigliamo.

SI PREGA DI NOTARE: per evitare il danneggiamento del database, tutti i processi Firebird che aprono lo stesso file di database dovrebbero lavorare con lo stesso FIREBIRD_LOCK. Per favore non creare questa variabile e utilizzare le posizioni predefinite.

Dimensione dei file interni

In pratica, la dimensione totale dei file interni di Firebird è di circa 100-200 MB, fino a 2 GB come massimo conosciuto.

File temporanei in Firebird

I file temporanei vengono creati dal motore Firebird per memorizzare dati temporanei che si verificano come risultato delle operazioni degli utenti - query con DISTINCT, ad esempio. I file temporanei possono essere molto grandi nei sistemi di produzione ad alto carico, quindi è necessario per un amministratore esperto essere in grado di riconoscere i tipi di file temporanei e, se necessario, ottimizzare la configurazione di Firebird o allocare spazio su disco per memorizzare i file temporanei.

Posizione dei file temporanei in Firebird

Firebird crea file temporanei nella cartella specificata dalle variabili d’ambiente FIREBIRD_TMP, TEMP, TMP (in questo ordine). Se non esistono tali variabili, i file temporanei verranno creati in C:\Temp su Windows o /tmp su Linux.

In pratica, su Windows possiamo vedere i file temporanei di Firebird in C:\Windows\Temp (corrisponde alla variabile d’ambiente TEMP), su Linux in /tmp.

Tipi di file temporanei in Firebird

Ci sono i seguenti file temporanei (tutti usano il prefisso fb_):

  1. fb_table_ oggetti tabella, inclusi, ma non limitati a, tabelle temporanee
  2. fb_blob_ blob e transazioni autonome
  3. fb_undo_ dati di undo
  4. fb_recbuf_ utilizzato per mantenere dati intermedi in query attive, tabelle virtuali, ecc.
  5. fb_merge_ dati per hash join
  6. fb_sort_ ordinamenti (per query con DISTINCT/ORDER BY/GROUP BY e per creare/ricreare indici)
  7. fb_tpc_ dati fb_tpc_ - dalla v4, elenco di tutte le transazioni note con numeri di commit associati
  8. fb_snap_ dati per - dalla v4, elenco di tutti gli snapshot di database attivi

Come cambiare la posizione dei file temporanei?

Per le versioni di Firebird precedenti alla 4, è possibile definire una cartella specifica per memorizzare i file temporanei dei tipi 4-8 con il parametro di configurazione TempDirectories di Firebird.

Per Firebird 4 e versioni successive, il nuovo parametro di configurazione TempTableDirectory consente di specificare la cartella per memorizzare le tabelle temporanee dei tipi 1-3. Può essere impostato in firebird.conf e in databases.conf.

Variabili d’ambiente per Firebird

Firebird può utilizzare le seguenti variabili d’ambiente del sistema operativo (se definite):

  • FIREBIRD cartella con i file di configurazione di Firebird
  • FIREBIRD_LOCK cartella con i file interni
  • FIREBIRD_MSG cartella con il file dei messaggi (firebird.msg)
  • FIREBIRD_TMP cartella per i file temporanei

In pratica, FIREBIRD_TMP è l’unica variabile che ha senso definire se hai un valido motivo per memorizzare i file temporanei in una posizione specifica non predefinita.

Si prega di notare che se il percorso in FIREBIRD_TMP non è valido (non esiste o non ha permessi sufficienti), ciò porterà a errori critici che impediscono il funzionamento di Firebird.

Nota importante dagli sviluppatori del core di Firebird:

Mai, mai, MAI impostare/modificare la variabile d’ambiente FIREBIRD_LOCK - a meno che tu non sappia MOLTO bene cosa stai facendo.

Suggerimento esplicito dal team IBSurgeon:

Non modificare mai FIREBIRD_LOCK. Questa informazione è solo di riferimento.

Per altri file temporanei - vedi questo.

Invece del riepilogo: risposta alla domanda molto frequente

Molti amministratori chiedono - dovremmo usare un RAM-drive o tmpfs per memorizzare i file interni e/o temporanei di Firebird?

La risposta breve è: No, è meglio ottimizzare la configurazione di Firebird. Se hai molta memoria, puoi aumentare il valore per DefaultDBCachePages (solo per SuperServer) e aumentare TempCacheLimit (nelle versioni 3+ Firebird consente di utilizzare TempCacheLimit oltre 2 GB).

Se non sei sicuro di quali valori utilizzare, utilizza il Calcolatore di configurazione Firebird, che crea configurazioni ottimali e sicure per specifici parametri hardware/VM.

La risposta più lunga: Firebird è progettato per mantenere la maggior parte dei file temporanei e interni in memoria, ma, poiché in pratica ci sono situazioni in cui gli oggetti temporanei diventano molto grandi, ha anche il meccanismo per memorizzarli su disco. Firebird utilizza efficacemente i meccanismi del sistema operativo (mmap, cache del file system, file temporanei, ecc.) per memorizzare nella cache i file temporanei e interni in memoria quando è possibile e ragionevole. L’ottimizzazione di Firebird dovrebbe essere fatta prima attraverso la configurazione di Firebird, e poi del sistema operativo (impostare la posizione dei file temporanei, varie opzioni per l’ottimizzazione della cache dei file, ecc.).

Collegamenti correlati

Video:

Presentazione sull’ottimizzazione dell’utilizzo della memoria

Non esitare a porre domande o inviare feedback a [email protected]