Maximale tabelgrootte in InterBase (vóór 2009)
Dmitry Kuzmenko, 20-okt-2009
Tijdens het werken aan een interessant technisch supportincident met een van onze klanten, ontdekten we dat het werkelijke maximale aantal rijen verschilt van de opgegeven limiet.
In de documentatieset [Operations Guide for InterBase 6, pagina 27, InterBase Specification] kunnen we het volgende lezen:
“Maximaal aantal rijen en kolommen per tabel: Ontworpen voor 2^32 rijen, omdat rijen worden genummerd met een 32-bits unsigned integer per tabel.”
Natuurlijk worden rijen genummerd met een 32-bits integer. Helaas kan geen enkele tabel ooit de limiet van 2 miljard records bereiken - zelfs niet de tabel met slechts één kolom.
De reden voor dit gedrag ligt in het algoritme voor het berekenen van vrije ruimte voor nieuwe (ingevoegde) records - er kan een integer-overflow optreden en u zult de volgende foutmelding zien in interbase.log:
pointer page vanished from DPM_next (249)
En de realiteit is dat de databasepaginagrootte of rijgrootte geen invloed heeft op deze limiet. De limiet is een magische tabelgrootte die altijd hetzelfde is (~36,6 gigabytes) en kan worden berekend in pagina’s voor elke databasepaginagrootte als:
Het maximale aantal pagina’s voor één tabel kan worden berekend als
MaxDataPageCount = (MaxInt / PageSize) * 17.476
MaxInt is natuurlijk = 2147483647. Plaats uw databasepaginagrootte in plaats van PageSize en het resultaat toont hoeveel pagina’s kunnen worden toegewezen voor elke tabel.
Een tabel kan bijvoorbeeld niet meer dan ~9 miljoen datapagina’s hebben in een database met een paginagrootte van 4K.
Vanuit het oogpunt van het aantal records kan een tabel met 2 integer-kolommen niet groter worden dan 600 miljoen (!) records (vergeet niet dat elk record een header van 14 bytes heeft).
Verward? Vermenigvuldig MaxDataPageCount met PageSize en deel het resultaat door de gemiddelde recordgrootte van uw grootste tabel - dan weet u wanneer deze tabel de limiet overschrijdt en uw database zal stoppen met werken .
Deze limiet is pas opgelost in Firebird 2. Deze bestaat nog steeds in InterBase 2007.
Als u vragen of suggesties heeft over de informatie op deze pagina, neem dan gerust contact op met ons onderzoeksteam via [email protected]. We verwelkomen ook graag informatie over interessante en/of vreemde zaken met betrekking tot InterBase of Firebird.