Tamanho máximo de tabela no InterBase (pré-2009)
Dmitry Kuzmenko, 20-Out-2009
Trabalhando em um incidente interessante de suporte técnico com um de nossos clientes, descobrimos que o número máximo real de linhas difere do limite declarado.
Na documentação [Operations Guide for InterBase 6, página 27, InterBase Specification] podemos ler o seguinte:
“Número máximo de linhas e colunas por tabela: Por design, 2^32 linhas, porque as linhas são enumeradas com um inteiro sem sinal de 32 bits por tabela.”
Claro, as linhas são enumeradas por um inteiro de 32 bits. Infelizmente, mas na realidade nenhuma tabela pode alcançar o limite de 2 bilhões de registros - mesmo a tabela com apenas uma coluna.
A razão desse comportamento está no algoritmo de cálculo de espaço livre para um novo registro (inserido) - o estouro de inteiro pode ocorrer e você verá a seguinte mensagem de erro no interbase.log:
pointer page vanished from DPM_next (249)
E, a realidade é que o tamanho da página do banco de dados ou o tamanho da linha não afetam esse limite. O limite é um tamanho mágico de tabela que é sempre o mesmo (~36,6 gigabytes) e pode ser calculado em páginas para qualquer tamanho de página do banco de dados como:
O número máximo de páginas para uma tabela pode ser calculado como
MaxDataPageCount = (MaxInt / PageSize) * 17.476
MaxInt, claro, = 2147483647. Coloque o tamanho da página do seu banco de dados no lugar de PageSize e o resultado mostrará quantas páginas podem ser alocadas para qualquer tabela.
Por exemplo, uma tabela não pode ter mais de ~9 milhões de páginas de dados em um banco de dados com tamanho de página de 4K.
Do ponto de vista da contagem de registros, uma tabela com 2 colunas inteiras não pode crescer além de 600 milhões (!) de registros (não se esqueça de que cada registro tem um cabeçalho de 14 bytes).
Confuso? Multiplique MaxDataPageCount por PageSize e divida o resultado pelo tamanho médio do registro da sua maior tabela - você saberá quando essa tabela excederá o limite e seu banco de dados parará de funcionar .
Este limite foi corrigido apenas no Firebird 2. Ele ainda existe no InterBase 2007.
Se você tiver perguntas ou sugestões sobre as informações nesta página, sinta-se à vontade para entrar em contato com nossa equipe de pesquisa via [email protected]. Também recebemos com satisfação qualquer informação sobre coisas interessantes e/ou estranhas relacionadas ao InterBase ou Firebird.