Kích thước bảng tối đa trong InterBase (trước năm 2009)
Dmitry Kuzmenko, 20-Th10-2009
Khi làm việc với một sự cố hỗ trợ kỹ thuật thú vị với một trong những khách hàng của chúng tôi, chúng tôi phát hiện ra rằng số lượng hàng tối đa thực tế khác với giới hạn đã công bố.
Trong bộ tài liệu [Operations Guide for InterBase 6, trang 27, InterBase Specification] chúng ta có thể đọc như sau:
“Số lượng hàng và cột tối đa trên mỗi bảng: Theo thiết kế, 2^32 hàng, vì các hàng được đánh số bằng số nguyên không dấu 32-bit trên mỗi bảng.”
Tất nhiên, các hàng được đánh số bằng số nguyên 32-bit. Đáng buồn thay, nhưng thực tế không có bảng nào có thể đạt tới giới hạn 2 tỷ bản ghi - ngay cả bảng chỉ có một cột.
Lý do của hành vi này nằm ở thuật toán tính toán không gian trống cho bản ghi mới (được chèn) - tràn số nguyên có thể xảy ra và bạn sẽ thấy thông báo lỗi sau trong interbase.log:
pointer page vanished from DPM_next (249)
Và thực tế là kích thước trang cơ sở dữ liệu hoặc kích thước hàng không ảnh hưởng đến giới hạn này. Giới hạn là một kích thước bảng kỳ diệu luôn giống nhau (~36,6 gigabyte) và có thể được tính bằng số trang cho bất kỳ kích thước trang cơ sở dữ liệu nào như:
Số trang tối đa cho một bảng có thể được tính như
MaxDataPageCount = (MaxInt / PageSize) * 17.476
MaxInt, tất nhiên, = 2147483647. Đặt kích thước trang cơ sở dữ liệu của bạn thay cho PageSize và kết quả sẽ cho thấy có bao nhiêu trang có thể được cấp phát cho bất kỳ bảng nào
Ví dụ, một bảng không thể có nhiều hơn ~9 triệu trang dữ liệu trong cơ sở dữ liệu với kích thước trang 4K.
Từ quan điểm số lượng bản ghi, một bảng có 2 cột số nguyên không thể phát triển lớn hơn 600 triệu (!) bản ghi (đừng quên rằng mỗi bản ghi có tiêu đề 14 byte).
Bối rối? Nhân MaxDataPageCount với PageSize, và chia kết quả cho kích thước bản ghi trung bình của bảng lớn nhất của bạn - bạn sẽ biết khi nào bảng này vượt quá giới hạn và cơ sở dữ liệu của bạn sẽ ngừng hoạt động .
Giới hạn này chỉ được khắc phục trong Firebird 2. Nó vẫn tồn tại trong InterBase 2007.
Nếu bạn có câu hỏi hoặc đề xuất về thông tin trên trang này, vui lòng liên hệ với nhóm nghiên cứu của chúng tôi qua [email protected]. Chúng tôi cũng hoan nghênh mọi thông tin về những điều thú vị và/hoặc kỳ lạ liên quan đến InterBase hoặc Firebird.