Ограничения QHB
В таблице 1 описываются различные жесткие ограничения QHB. Однако практические ограничения, такие как предел производительности или доступного дискового пространства, могут проявиться раньше, чем будут достигнуты абсолютные жесткие ограничения.
Таблица 1. Ограничения QHB
Параметр | Верхний предел | Комментарий |
---|---|---|
размер базы данных | без ограничений | |
количество баз данных | 4 294 950 911 | |
отношения в базе данных | 1 431 650 303 | |
размер отношения | 32 ТБ | со значением BLCKSZ по умолчанию, равным 8192 байта |
строк в таблице | ограничено количеством кортежей, которое может уместиться на 4 294 967 295 страниц | |
столбцов в таблице | 1600 | дополнительно ограничено размером кортежа, который может уместиться на одной странице; см примечание ниже |
размер поля | 1 ГБ | |
длина идентификатора | 63 байта | можно увеличить, перекомпилировав QHB |
индексов на таблицу | без ограничений | ограничен максимальным количеством отношений в базе данных |
столбцов на индекс | 32 | можно увеличить, перекомпилировав QHB |
ключи раздела | 32 | можно увеличить, перекомпилировав QHB |
Максимальное количество столбцов таблицы дополнительно уменьшается, поскольку сохраняемый кортеж должен умещаться на одной странице кучи размером 8192 байта. Например, без учета заголовка, кортеж, состоящий из 1600 столбцов int, будет занимать 6400 байт и может храниться на странице кучи, однако кортеж из 1600 столбцов bigint будет занимать 12 800 байт и, следовательно, на странице не поместится. Поля переменной длины таких типов, как text, varchar и char, могут хранить свои значения отдельно, в таблице TOAST, когда эти значения достаточно велики для этого. При этом внутри кортежа в куче таблицы должен остаться только 18-байтовый указатель. Для более коротких полей переменной длины используется 4-байтовый или 1-байтовый заголовок, а значение сохраняется внутри кортежа кучи.
Столбцы, которые были удалены из таблицы, также влияют на максимальное количество столбцов. Более того, хотя значения удаленных столбцов для вновь создаваемых кортежей внутренне помечаются как NULL в заведенной специально для них битовой карте кортежа, эта карта тоже занимает место.