В postgres 9.4 есть таблица со следующими типами столбцов:
NAME TYPE TYPE SIZE
id | integer | 4 bytes
timestamp | timestamp with time zone | 8 bytes
num_seconds | double precision | 8 bytes
count | integer | 4 bytes
total | double precision | 8 bytes
min | double precision | 8 bytes
max | double precision | 8 bytes
local_counter | integer | 4 bytes
global_counter | integer | 4 bytes
discrete_value | integer | 4 bytes
Всего выдачи: 60 bytes per row
Размер возвращаемой таблицы (с тостом) по pg_table_size(table)
равно: 49 152 bytes
Количество строк в таблице: 97
Учитывая, что таблица разбита на страницы по 8kB
, мы можем вписать 49 152/8 192 = 6 pages
в эта таблица.
Каждая страница и каждая строка содержат некоторые метаданные ... Глядя на чистый размер типа данных, мы должны ожидать что-то около 97 * 60 = 5 820 bytes
данных строки и добавление примерно одинаковых количество метаданных к нему, мы не приземлимся даже близко к результату, возвращаемому pg_table_size
: 49 152 байта.
Действительно ли метаданные занимают ~ 9x места по сравнению с чистыми данными в postgres?