Вход | Регистрация
 

Размер индексных таблиц в PostgreSQL

Размер индексных таблиц в PostgreSQL
Я
   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?
   timurhv
 
2 - 15.10.20 - 14:01
(1) 96 + 96 + 14
   timurhv
 
3 - 15.10.20 - 14:04
Понимаю что надо перейти на ключи-справочники, это и сделаю.
Интересно почему разница в десятки раз отличается.
   mistеr
 
4 - 15.10.20 - 15:01
(0) Могу предположить, что разница из-за старых версий данных. PostgreSQL хранит их рядом с актуальными данными, а MSSQL отдельно (в tempdb).

Vacuum-то делается в базе?

Также могут влиять настройки выделения места в файлах данных.
   ДенисЧ
 
5 - 15.10.20 - 15:09
(2) ииии... А чего ты хотел тогда?
   timurhv
 
6 - 15.10.20 - 15:20
(5) хотел как в MSSQL в 232 Мб, а не 6970 Мб
   timurhv
 
7 - 15.10.20 - 15:35
(4) Автовакум включен.
Настройки посмотрю, спс
   rphosts
 
8 - 15.10.20 - 16:54
(7) тебя спросили про вакуум, а не автовакуум.
Вангую что базу никогда не обслуживали... а потом ещё на постгри ругаются...
   timurhv
 
9 - 15.10.20 - 18:01
(8) Запустил vacuum + full, ничего не изменилось после выполнения.
База с нуля была создана в дев-контуре и загружена dt. При пересчете итогов размеры таблиц уходят в 0, потом снова разрастаются.
   H A D G E H O G s
 
10 - 15.10.20 - 21:30
(0) Это связано с какой-то дичью. Кластерный индекс не содержит в себе данные, это лишь сортировка + чето там служебное.

Вот у меня получается 10.4 байта индекса на одну строку таблицы при размере в 160 байт данных на строку.
http://prntscr.com/v026ry
   Cyberhawk
 
11 - 15.10.20 - 21:51
SELECT pg_relation_size('имя_твоего_индекса'); что возвращает?
   timurhv
 
12 - 15.10.20 - 22:34
(10) В MSSQL все ок
(11) 7308124160, я и физически на диске по OID посмотрел сколько файлы весят

Создал пустую базу 1 документ, 1 регистр накопления, 3 строковых и 2 ссылочных измерения, такая же ситуация.
Оставил 2 ссылочных - тоже самое, т.е. это не связано со строковыми измерениям.
Индексы таблицы итогов: public._accumrgt42_1 = 8776 kB
Таблица итогов: public._accumrgt42 = 8248 kB
   timurhv
 
13 - 15.10.20 - 22:40
(12) Дополню, выставил у первого измерения ссылочного типа "Индексировать", размер уменьшился до 6648 kB
По второму уже смысла нет, размер не уменьшается, создается еще одна таблица в 4880 kB
   timurhv
 
14 - 15.10.20 - 22:58
В типовых конфигах БП тоже самое, грусть-печалька.
   H A D G E H O G s
 
15 - 15.10.20 - 23:01
(13) Используйте MS SQL
   Cyberhawk
 
16 - 16.10.20 - 20:45
(12) Наверное это как-то связано с тем, что в Постгри кластерный индекс живет отдельно от "основной" таблицы, а кластеризация (упорядочивание) основной таблицы выполняется только на конкретный момент времени. После этого новые записи продолжают вставляться тупо в конец таблицы независимо от порядка, задаваемого кластерным индексом. И кластеризацию поэтому нужно проводить периодически.
Кстати, В-деревья подвезли в Постгри ж совсем недавно, может только от таких индексов можно ожидать, что они будут занимать меньше места? Хотя чем оно занято если индекс не В-дерево, все равно хз.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.