Maximální velikost tabulky v InterBase (před rokem 2009)
Dmitry Kuzmenko, 20-Oct-2009
Při řešení zajímavého technického incidentu podpory s jedním z našich zákazníků jsme zjistili, že skutečný maximální počet řádků se liší od deklarovaného limitu.
V dokumentaci [Operations Guide for InterBase 6, strana 27, InterBase Specification] můžeme číst následující:
“Maximální počet řádků a sloupců na tabulku: Návrhově 2^32 řádků, protože řádky jsou číslovány 32bitovým celým číslem bez znaménka na tabulku.”
Samozřejmě, řádky jsou číslovány 32bitovým celým číslem. Bohužel, ale žádná tabulka nikdy nemůže dosáhnout limitu 2 miliard záznamů - dokonce ani tabulka s pouze jedním sloupcem.
Důvodem takového chování je algoritmus výpočtu volného místa pro nový (vložený) záznam - může dojít k přetečení celého čísla a v souboru interbase.log uvidíte následující chybovou zprávu:
pointer page vanished from DPM_next (249)
A skutečnost je taková, že velikost stránky databáze nebo velikost řádku tento limit neovlivňuje. Limit je magická velikost tabulky, která je vždy stejná (~36,6 gigabajtů) a lze ji vypočítat ve stránkách pro jakoukoli velikost stránky databáze jako:
Maximální počet stránek pro jednu tabulku lze vypočítat jako
MaxDataPageCount = (MaxInt / PageSize) * 17.476
MaxInt je samozřejmě = 2147483647. Místo PageSize dosaďte velikost stránky vaší databáze a výsledek ukáže, kolik stránek lze alokovat pro jakoukoli tabulku.
Například tabulka nemůže mít více než ~9 milionů datových stránek v databázi s velikostí stránky 4K.
Z hlediska počtu záznamů se tabulka se 2 celočíselnými sloupci nemůže rozrůst na více než 600 milionů (!) záznamů (nezapomeňte, že každý záznam má 14 bajtů hlavičky).
Zmateni? Vynásobte MaxDataPageCount hodnotou PageSize a výsledek vydělte průměrnou velikostí záznamu vaší největší tabulky - zjistíte, kdy tato tabulka překročí limit a vaše databáze přestane fungovat.
Tento limit byl opraven až ve Firebirdu 2. Stále existuje v InterBase 2007.
Pokud máte dotazy nebo návrhy týkající se informací na této stránce, neváhejte kontaktovat náš výzkumný tým prostřednictvím [email protected]. Uvítáme také jakékoli informace o zajímavých a/nebo podivných věcech souvisejících s InterBase nebo Firebirdem.