Максимална величина табеле у InterBase-у (пре 2009)
Dmitry Kuzmenko, 20-окт-2009
Радећи на занимљивом инциденту техничке подршке са једним од наших купаца, открили смо да се стварни максимални број редова разликује од декларисаног лимита.
У документацији [Operations Guide for InterBase 6, страна 27, InterBase Specification] можемо прочитати следеће:
“Максимални број редова и колона по таблици: По дизајну, 2^32 редова, јер су редови нумерисани 32-битним неозначеним целим бројем по таблици.”
Наравно, редови су нумерисани 32-битним целим бројем. Нажалост, али заправо ниједна табела никада не може достићи лимит од 2 милијарде записа - чак ни табела са само једном колоном.
Разлог за такво понашање је у алгоритму израчунавања слободног простора за нови (уметнути) запис - може доћи до прекорачења целобројне вредности и видећете следећу поруку о грешци у interbase.log:
pointer page vanished from DPM_next (249)
И, реалност је да величина странице базе података или величина реда не утичу на овај лимит. Лимит је магична величина табеле која је увек иста (~36,6 гигабајта) и може се израчунати у страницама за било коју величину странице базе података као:
Максимални број страница за једну табелу може се израчунати као
MaxDataPageCount = (MaxInt / PageSize) * 17.476
MaxInt је, наравно, = 2147483647. Поставите величину странице ваше базе података уместо PageSize и резултат ће показати колико страница може бити додељено за било коју табелу.
На пример, табела не може имати више од ~9 милиона податковних страница у бази са величином странице од 4K.
Са становишта броја записа, табела са 2 целобројне колоне не може нарасти више од 600 милиона (!) записа (не заборавите да сваки запис има 14 бајтова заглавља).
Збуњени? Помножите MaxDataPageCount са PageSize и поделите резултат са просечном величином реда ваше највеће табеле - знаћете када ће та табела премашити лимит и ваша база података ће престати да ради .
Овај лимит је поправљен тек у Firebird 2. Још увек постоји у InterBase 2007.
Ако имате питања или сугестије о информацијама на овој страници, слободно контактирајте наш истраживачки тим преко [email protected]. Такође смо добродошли за било какве информације о занимљивим и/или чудним стварима везаним за InterBase или Firebird.