powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Большая разница разница между pg_column_size и pg_relation_size
6 сообщений из 6, страница 1 из 1
Большая разница разница между pg_column_size и pg_relation_size
    #39740259
druff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, возможно нубский вопрос, проясните, пожалуйста, из-за чего может быть такой большой разница между суммой размеров всех полей в таблице
Код: sql
1.
select sum(pg_column_size(t.*)) from t;

и размером самой таблицы
Код: sql
1.
select pg_relation_size('t');



Разница весьма существенная, 120МБ vs 4ГБ для 300тыщ записей,
в самой таблице несколько десятков UUID и VARCHAR(30).

размер файла который возвращает
Код: sql
1.
SELECT pg_relation_filepath('t');

- 1GB.

VACUUM насколько мне известно ни разу не запускали на этой базе/таблице.
...
Рейтинг: 0 / 0
Большая разница разница между pg_column_size и pg_relation_size
    #39740313
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
druffVACUUM насколько мне известно ни разу не запускали на этой базе/таблице.
Сами же и ответили.
pg_relation_size считает полный размер, включая мертвые строки.
В то время как pg_column_size в запросе считает только живые значения.

Если vacuum все-таки запустите, то опять не сойдется. И скорее всего в другую сторону.
pg_relation_size не учитывает toast-таблицу, лучше использовать pg_table_size.
...
Рейтинг: 0 / 0
Большая разница разница между pg_column_size и pg_relation_size
    #39740328
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Лузанов,

Есть ещё заголовки страниц и заголовки записей. И значения в записи выравниваются, что приводит к промежуткам и увеличению общего занимаемого места.
...
Рейтинг: 0 / 0
Большая разница разница между pg_column_size и pg_relation_size
    #39740444
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

Не стал про это писать, хотя заголовок страницы pg_column_size(table.*) похоже учитывает, а вот выравнивание нет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
demo=# create table t (c1 int, c2 int);
CREATE TABLE
demo=# insert into t values (1,1);
INSERT 0 1
demo=# select pg_column_size(t.*) from t;
 pg_column_size 
----------------
             32
(1 row)

demo=# select pg_column_size(c1)+pg_column_size(c2) from t;
 ?column? 
----------
        8
(1 row)
...
Рейтинг: 0 / 0
Большая разница разница между pg_column_size и pg_relation_size
    #39740621
grgdvo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

так int и так нормально выравнен.... а вот если

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
test=> create table t (c1 int, c2 char(15));
CREATE TABLE
test=> insert into t values(1, '1111');
INSERT 0 1
test=> select pg_column_size(t.*) from t;
 pg_column_size 
----------------
             44
(1 row)

test=> select pg_column_size(c1)+pg_column_size(c2) from t;
 ?column? 
----------
       20
(1 row)


то выравнивание учитывается
...
Рейтинг: 0 / 0
Большая разница разница между pg_column_size и pg_relation_size
    #39740732
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grgdvo,

Я почему-то был уверен, что у второго столбца c2 поставил тип bigint.
Поэтому результат pg_column_size(t.*) = 32 навел о мысли о том, что выравнивание не учитывается.

Однако это не так, спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Большая разница разница между pg_column_size и pg_relation_size
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]