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:
- file di blocco fb_lock_ - file utilizzati dal gestore di blocco di Firebird
- file fbNN_monitor_ con dati delle tabelle di monitoraggio
- file fbNN_trace_ con dati per sessioni di traccia
- file fb_event_ con buffer memorizzati di eventi
- file fb_user_mapping con dati di mappatura utenti
- file con dati interni per sessioni di traccia
- file flag (dimensione zero)
- 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_):
- fb_table_ oggetti tabella, inclusi, ma non limitati a, tabelle temporanee
- fb_blob_ blob e transazioni autonome
- fb_undo_ dati di undo
- fb_recbuf_ utilizzato per mantenere dati intermedi in query attive, tabelle virtuali, ecc.
- fb_merge_ dati per hash join
- fb_sort_ ordinamenti (per query con DISTINCT/ORDER BY/GROUP BY e per creare/ricreare indici)
- fb_tpc_ dati fb_tpc_ - dalla v4, elenco di tutte le transazioni note con numeri di commit associati
- 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:
- Utilizzo della memoria in Firebird. Parte 1: Comprendere l’utilizzo della memoria
- Utilizzo della memoria in Firebird: Parte 2. Ottimizzazione dell’utilizzo della memoria
Presentazione sull’ottimizzazione dell’utilizzo della memoria
Non esitare a porre domande o inviare feedback a [email protected]