|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
Есть у меня две таблички содержащие по одному столбцу с одинаковым наименованием, без index и constraint, но разным типом данных: smallint, boolean, содержащие по 7000000 тестовых записей 0/1. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Вывод и интересующих таблиц: Код: plaintext 1. 2. 3. 4.
Код: plsql 1. 2. 3. 4.
Вывод: Код: plaintext 1. 2. 3.
Соответственно интересует разница в показаниях, и есть ли смысл использовать boolean тип, с точки зрения занимаемого места. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2017, 23:25 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
Код: plsql 1.
du -h /var/lib/pgsql/9.6/data/base/2624085/2627534 Код: plaintext
Код: plsql 1.
du -h /var/lib/pgsql/9.6/data/base/2624085/2627535 Код: plaintext
Печально, получается от boolean никакого толку, с точки зрения хранения :(. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2017, 23:39 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
При этом: Код: plsql 1.
Код: plaintext 1. 2.
Код: plsql 1.
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2017, 23:47 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
Bsplesk, Надо смотреть полностью структуру таблицы. Есть фокусы выравнивания данных в памяти (и паровозиком в датафайлах на диске) когда одна и та же таблица, но с разным порядком полей занимает разное место. Например вот тут затрагивался вопрос https://pgday.ru/ru/2016/papers/62 с 34 слайда. Но вменяемого полного описания механики мне нигде не попадалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2017, 23:55 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
Пасиб "читну на ночь", но походу придется купить "Man_ы" .... эх. а не хотелось. Для прикола создал 3 аналогичную табличку с типом INTEGER, заполнил (причем не 0/1, а диапазоном), посмотрел на размер, он равен типам BOOLEAN/SMALLINT, хотя казалось бы .... Код: plsql 1.
Код: plaintext 1. 2.
Код: plsql 1. 2. 3.
-- место Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 00:15 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
и c bigint, аналогичный размер. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 00:30 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
повторил, создал по 3 тестовых столбца, на integer/bigint разница появилась, вообщем интересно postgres скидывает/нарезает на диск данные. Видимо учитывает настройки дисковой подсистемы. Интересно нет ли какого нибудь tool, который бы позволял просматривать/тюнить БД под конкретные данные, или подсказывал какие параметры файловой системы оптимальны для конкретных данных..... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 00:49 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
Bsplesk, настройки ФС не учитывает. Выравнивание структур в памяти - учитывает и добавляет пустые блоки для соблюдения этого выравнивания. Повторюсь, именно это и есть причина наблюдаемого поведения. Но нормального описания что как и куда выравнивается мне не попадалось. Обратите внимание на typalign в pg_type ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 00:59 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
MelkijBsplesk, настройки ФС не учитывает. Выравнивание структур в памяти - учитывает и добавляет пустые блоки для соблюдения этого выравнивания. Повторюсь, именно это и есть причина наблюдаемого поведения. Но нормального описания что как и куда выравнивается мне не попадалось. Обратите внимание на typalign в pg_type Все пошел читать ... :) на ночь сказку. Для примера попробовал массивы и jsonb, jsonb - ожидаемо медленно+большой объем, а вот массив разочаровал, думал он оптимально сложит, а нет ... или "паразитные" много занимают. но и insert у массива медленней обычных столбцов. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 01:27 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
C jsonb не верно в сравнении с массивом, ибо с ключами: Код: plsql 1. 2. 3. 4. 5. 6.
Без ключей лучше: Код: plsql 1. 2. 3. 4. 5. 6.
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 01:39 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
Bsplesk, у массива есть константный заголовок, на память что-то около 16 байт. Поэтому одно значения в массиве хранить нецелесообразно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 12:21 |
|
Сколько занимает места таблица
|
|||
---|---|---|---|
#18+
Bspleskповторил, создал по 3 тестовых столбца, на integer/bigint разница появилась, вообщем интересно postgres скидывает/нарезает на диск данные. Видимо учитывает настройки дисковой подсистемы. Интересно нет ли какого нибудь tool, который бы позволял просматривать/тюнить БД под конкретные данные, или подсказывал какие параметры файловой системы оптимальны для конкретных данных..... Это не по файловую систему а про выравнивание структур на диске и в памяти. Вам сюда вот: https://www.postgresql.org/docs/10/static/storage-page-layout.html 23 байта заголовок (округленный до MAXALIGN т.е. обычно 24 байта) и далее данные таблицы но тоже суммарно до MAXALIGN по длине (т.е. не каждый по отдельности) округлены, т.е. до до 8 байт в общем случае обычно. То есть минимум что может занимать строка - 32 байта... и что там boolean что bigint - размер таблицы будет одинаковый. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2017, 13:10 |
|
|
start [/forum/topic.php?fid=53&fpage=62&tid=1996061]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 291ms |
total: | 422ms |
0 / 0 |