|
Размер индексных таблиц в PostgreSQL | ☑ | ||
---|---|---|---|---|
0
timurhv
15.10.20
✎
13:58
|
Имеется PostgreSQL 11.9-1.1C
Платформа 1С 8.3.17.1549 Регистр накопления с измерениями (только кластерный индекс), в измерениях есть строковые (3шт) и ссылочные типы (2шт). Занялся оптимизаций регистра, хочу избавиться от строковых типов и заметил сильное отличие в размерах между PostgreSQL и MSSQL: Основная таблица итогов _accumrgt3795 - 6583 Мб Индексная таблица итогов _accumrgt3795_1 - 6970 Мб Итого: 13553 Мб Эта же конфигурация, но архив старый имеет размер в MSSQL: Data: 5197 Мб Index: 232 Мб Итого: 5429 Мб С чем это связано? Есть какая-то особенность хранения индексов в PostgreSQL? |
|||
1
ДенисЧ
15.10.20
✎
14:00
|
А строковые наверно символов по 200?
|
|||
2
timurhv
15.10.20
✎
14:01
|
(1) 96 + 96 + 14
|
|||
3
timurhv
15.10.20
✎
14:04
|
Понимаю что надо перейти на ключи-справочники, это и сделаю.
Интересно почему разница в десятки раз отличается. |
|||
4
mistеr
15.10.20
✎
15:01
|
(0) Могу предположить, что разница из-за старых версий данных. PostgreSQL хранит их рядом с актуальными данными, а MSSQL отдельно (в tempdb).
Vacuum-то делается в базе? Также могут влиять настройки выделения места в файлах данных. |
|||
5
ДенисЧ
15.10.20
✎
15:09
|
(2) ииии... А чего ты хотел тогда?
|
|||
6
timurhv
15.10.20
✎
15:20
|
(5) хотел как в MSSQL в 232 Мб, а не 6970 Мб
|
|||
7
timurhv
15.10.20
✎
15:35
|
(4) Автовакум включен.
Настройки посмотрю, спс |
|||
8
rphosts
15.10.20
✎
16:54
|
(7) тебя спросили про вакуум, а не автовакуум.
Вангую что базу никогда не обслуживали... а потом ещё на постгри ругаются... |
|||
9
timurhv
15.10.20
✎
18:01
|
(8) Запустил vacuum + full, ничего не изменилось после выполнения.
База с нуля была создана в дев-контуре и загружена dt. При пересчете итогов размеры таблиц уходят в 0, потом снова разрастаются. |
|||
10
H A D G E H O G s
15.10.20
✎
21:30
|
(0) Это связано с какой-то дичью. Кластерный индекс не содержит в себе данные, это лишь сортировка + чето там служебное.
Вот у меня получается 10.4 байта индекса на одну строку таблицы при размере в 160 байт данных на строку. http://prntscr.com/v026ry |
|||
11
Cyberhawk
15.10.20
✎
21:51
|
SELECT pg_relation_size('имя_твоего_индекса'); что возвращает?
|
|||
12
timurhv
15.10.20
✎
22:34
|
(10) В MSSQL все ок
(11) 7308124160, я и физически на диске по OID посмотрел сколько файлы весят Создал пустую базу 1 документ, 1 регистр накопления, 3 строковых и 2 ссылочных измерения, такая же ситуация. Оставил 2 ссылочных - тоже самое, т.е. это не связано со строковыми измерениям. Индексы таблицы итогов: public._accumrgt42_1 = 8776 kB Таблица итогов: public._accumrgt42 = 8248 kB |
|||
13
timurhv
15.10.20
✎
22:40
|
(12) Дополню, выставил у первого измерения ссылочного типа "Индексировать", размер уменьшился до 6648 kB
По второму уже смысла нет, размер не уменьшается, создается еще одна таблица в 4880 kB |
|||
14
timurhv
15.10.20
✎
22:58
|
В типовых конфигах БП тоже самое, грусть-печалька.
|
|||
15
H A D G E H O G s
15.10.20
✎
23:01
|
(13) Используйте MS SQL
|
|||
16
Cyberhawk
16.10.20
✎
20:45
|
(12) Наверное это как-то связано с тем, что в Постгри кластерный индекс живет отдельно от "основной" таблицы, а кластеризация (упорядочивание) основной таблицы выполняется только на конкретный момент времени. После этого новые записи продолжают вставляться тупо в конец таблицы независимо от порядка, задаваемого кластерным индексом. И кластеризацию поэтому нужно проводить периодически.
Кстати, В-деревья подвезли в Постгри ж совсем недавно, может только от таких индексов можно ожидать, что они будут занимать меньше места? Хотя чем оно занято если индекс не В-дерево, все равно хз. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |