|
| ||
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 | |||
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) Наверное это как-то связано с тем, что в Постгри кластерный индекс живет отдельно от "основной" таблицы, а кластеризация (упорядочивание) основной таблицы выполняется только на конкретный момент времени. После этого новые записи продолжают вставляться тупо в конец таблицы независимо от порядка, задаваемого кластерным индексом. И кластеризацию поэтому нужно проводить периодически.
Кстати, В-деревья подвезли в Постгри ж совсем недавно, может только от таких индексов можно ожидать, что они будут занимать меньше места? Хотя чем оно занято если индекс не В-дерево, все равно хз. |
|
Список тем форума |