Tamaño máximo de tabla en InterBase (antes de 2009)
Dmitry Kuzmenko, 20-Oct-2009
Trabajando en un interesante incidente de soporte técnico con uno de nuestros clientes, descubrimos que el número máximo real de filas difiere del límite declarado.
En el conjunto de documentación [Operations Guide for InterBase 6, página 27, InterBase Specification] podemos leer lo siguiente:
“Número máximo de filas y columnas por tabla: Por diseño, 2^32 filas, porque las filas se enumeran con un entero sin signo de 32 bits por tabla.”
Por supuesto, las filas se enumeran mediante un entero de 32 bits. Lamentablemente, pero en realidad ninguna tabla puede alcanzar el límite de 2 mil millones de registros - incluso la tabla con solo una columna.
La razón de este comportamiento está en el algoritmo de cálculo del espacio libre para un nuevo registro (insertado) - puede ocurrir un desbordamiento de entero y verá el siguiente mensaje de error en interbase.log:
pointer page vanished from DPM_next (249)
Y, la realidad es que el tamaño de página de la base de datos o el tamaño de fila no afectan este límite. El límite es un tamaño mágico de tabla que siempre es el mismo (~36.6 gigabytes) y se puede calcular en páginas para cualquier tamaño de página de base de datos como:
El número máximo de páginas para una tabla se puede calcular como
MaxDataPageCount = (MaxInt / PageSize) * 17.476
MaxInt, por supuesto, = 2147483647. Coloque el tamaño de página de su base de datos en lugar de PageSize y el resultado mostrará cuántas páginas se pueden asignar para cualquier tabla.
Por ejemplo, una tabla no puede tener más de ~9 millones de páginas de datos en una base de datos con tamaño de página de 4K.
Desde el punto de vista del número de registros, una tabla con 2 columnas enteras no puede crecer más de 600 millones (!) de registros (no olvide que cada registro tiene un encabezado de 14 bytes).
¿Confundido? Multiplique MaxDataPageCount por PageSize y divida el resultado por el tamaño promedio de registro de su tabla más grande - sabrá cuándo esta tabla excederá el límite y su base de datos dejará de funcionar.
Este límite solo se corrigió en Firebird 2. Todavía existe en InterBase 2007.
Si tiene preguntas o sugerencias sobre la información en esta página, no dude en contactar a nuestro equipo de investigación a través de [email protected]. También agradecemos cualquier información sobre cosas interesantes y/o extrañas relacionadas con InterBase o Firebird.