Dimensione massima della tabella in InterBase (pre 2009)
Dmitry Kuzmenko, 20-ott-2009
Lavorando su un interessante incidente di supporto tecnico con uno dei nostri clienti, abbiamo scoperto che il numero massimo effettivo di righe differisce dal limite dichiarato.
Nella documentazione [Operations Guide for InterBase 6, pagina 27, InterBase Specification] possiamo leggere quanto segue:
“Numero massimo di righe e colonne per tabella: Per progettazione, 2^32 righe, perché le righe sono enumerate con un intero senza segno a 32 bit per tabella.”
Naturalmente, le righe sono enumerate da un intero a 32 bit. Purtroppo, ma in realtà nessuna tabella può mai raggiungere il limite di 2 miliardi di record - anche la tabella con una sola colonna.
La ragione di questo comportamento è nell’algoritmo di calcolo dello spazio libero per un nuovo record (inserito) - può verificarsi un overflow di interi e vedrete il seguente messaggio di errore in interbase.log:
pointer page vanished from DPM_next (249)
E, la realtà è che la dimensione della pagina del database o la dimensione della riga non influenzano questo limite. Il limite è una dimensione magica della tabella che è sempre la stessa (~36,6 gigabyte) e può essere calcolata in pagine per qualsiasi dimensione di pagina del database come:
Il numero massimo di pagine per una tabella può essere calcolato come
MaxDataPageCount = (MaxInt / PageSize) * 17.476
MaxInt, ovviamente, = 2147483647. Inserite la dimensione della pagina del vostro database al posto di PageSize e il risultato mostrerà quante pagine possono essere allocate per qualsiasi tabella
Ad esempio, una tabella non può avere più di ~9 milioni di pagine dati in un database con dimensione pagina 4K.
Dal punto di vista del conteggio dei record, una tabella con 2 colonne intere non può crescere oltre 600 milioni (!) di record (non dimenticate che ogni record ha 14 byte di intestazione).
Confusi? Moltiplicate MaxDataPageCount per PageSize e dividete il risultato per la dimensione media dei record della vostra tabella più grande - saprete quando questa tabella supererà il limite e il vostro database smetterà di funzionare.
Questo limite è stato corretto solo in Firebird 2. Esiste ancora in InterBase 2007.
Se avete domande o suggerimenti sulle informazioni in questa pagina, non esitate a contattare il nostro team di ricerca via [email protected]. Accogliamo con piacere anche qualsiasi informazione su cose interessanti e/o strane relative a InterBase o Firebird.