Tato stránka byla strojově přeložena. Přečtěte si anglický originál. English

Knihovna IBSurgeon

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.