Ta strona została przetłumaczona maszynowo. Przeczytaj oryginał angielski. English

Biblioteka IBSurgeon

Maksymalny rozmiar tabeli w InterBase (przed 2009)

Dmitry Kuzmenko, 20-Oct-2009

Pracując nad interesującym incydentem wsparcia technicznego z jednym z naszych klientów, odkryliśmy, że rzeczywista maksymalna liczba wierszy różni się od deklarowanego limitu.

W zestawie dokumentacji [Operations Guide for InterBase 6, strona 27, InterBase Specification] możemy przeczytać:

“Maksymalna liczba wierszy i kolumn w tabeli: Z założenia, 2^32 wierszy, ponieważ wiersze są numerowane za pomocą 32-bitowej liczby całkowitej bez znaku na tabelę.”

Oczywiście, wiersze są numerowane przez 32-bitową liczbę całkowitą. Niestety, w rzeczywistości żadna tabela nigdy nie może osiągnąć limitu 2 miliardów rekordów - nawet tabela z tylko jedną kolumną.

Przyczyną takiego zachowania jest algorytm obliczania wolnego miejsca dla nowego (wstawianego) rekordu - może wystąpić przepełnienie liczby całkowitej i zobaczysz następujący komunikat o błędzie w interbase.log:

pointer page vanished from DPM_next (249)

I rzeczywistość jest taka, że rozmiar strony bazy danych lub rozmiar wiersza nie wpływa na ten limit. Limit to magiczny rozmiar tabeli, który jest zawsze taki sam (~36,6 gigabajtów) i można go obliczyć w stronach dla dowolnego rozmiaru strony bazy danych jako:

Maksymalną liczbę stron dla jednej tabeli można obliczyć jako

MaxDataPageCount = (MaxInt / PageSize) * 17.476

MaxInt, oczywiście, = 2147483647. Wstaw swój rozmiar strony bazy danych zamiast PageSize, a wynik pokaże, ile stron może być przydzielonych dla dowolnej tabeli

Na przykład, tabela nie może mieć więcej niż ~9 milionów stron danych w bazie danych z rozmiarem strony 4K.

Z punktu widzenia liczby rekordów, tabela z 2 kolumnami całkowitymi nie może urosnąć do więcej niż 600 milionów (!) rekordów (nie zapominaj, że każdy rekord ma 14 bajtów nagłówka).

Zdezorientowany? Pomnóż MaxDataPageCount przez PageSize i podziel wynik przez średni rozmiar rekordu swojej największej tabeli - dowiesz się, kiedy ta tabela przekroczy limit i Twoja baza danych przestanie działać.

Ten limit został naprawiony dopiero w Firebird 2. Nadal istnieje w InterBase 2007.

Jeśli masz pytania lub sugestie dotyczące informacji na tej stronie, skontaktuj się z naszym zespołem badawczym przez [email protected]. Chętnie przyjmiemy również wszelkie informacje o interesujących i/lub dziwnych rzeczach związanych z InterBase lub Firebird.