powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сколько весят индексы?
14 сообщений из 14, страница 1 из 1
Сколько весят индексы?
    #39258758
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица около 20 млн записей. В ней 5 индексов.
1) данные в колонке char 32, потом будет заполнен весь, но хз когда это будет. индекс занимает 2564 мб
2) данные в колонке char 32, потом будет заполнен на половину, но хз когда это будет. индекс занимает 2529 мб
сейчас где то миллиона полтора записей заполнено в 1 колонке и 700 тысяч во второй.
3) данные в колонке char var 255, заполнен 100% уникальными записями. индекс занимает 2028 мб.
4) данные в колонке char 16, очень мало данных, типа 1 запись на тысячу пустых. индекс занимает 1758 мб
5) данные в колонке char 10, заполнен данными 100%, но не уникальные значения (несколько сотен строк). индекс занимает 580 мб.
Размеры: таблица 8615 мб; toast 8680 кб; размер индексов 12 гб!!!
Вопросы: Это нормально такие индексы? Есть ли смысл ставить другие типы индексов под мою задачу (не btree)?
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39258768
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsx,

о людях, имеющих в пж поля типа char (не чар(1)) всё сказал г-н лавров, в знаменитой реплике.
о людях, всё время апдейтящих поля в пж--ных тостах он сказал то же самое. два раза.
у вас там что -- джейсоны или иксемель ?

ставьте плановый реиндекс на каждый 100 тыс -- 1 лям апдейтов, что ли.
иначе так и бкдете с вечно опухшими индексами сидеть.

ps для любителей множественных апдейтов -- у пж отвратительная архитектура. хуже только , вернее хуже не бывает.
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39258782
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxЕсть таблица около 20 млн записей. В ней 5 индексов.
1) данные в колонке char 32, потом будет заполнен весь, но хз когда это будет. индекс занимает 2564 мб
2) данные в колонке char 32, потом будет заполнен на половину, но хз когда это будет. индекс занимает 2529 мб
сейчас где то миллиона полтора записей заполнено в 1 колонке и 700 тысяч во второй.
3) данные в колонке char var 255, заполнен 100% уникальными записями. индекс занимает 2028 мб.
4) данные в колонке char 16, очень мало данных, типа 1 запись на тысячу пустых. индекс занимает 1758 мб
5) данные в колонке char 10, заполнен данными 100%, но не уникальные значения (несколько сотен строк). индекс занимает 580 мб.
Размеры: таблица 8615 мб; toast 8680 кб; размер индексов 12 гб!!!
Вопросы: Это нормально такие индексы? Есть ли смысл ставить другие типы индексов под мою задачу (не btree)?

Для начала: после того как вы в таблицу добавили новое поле с default значением - у вас таблицам и индексы выросли в 2 раза автоматически (и с хорошими шансами будут расти дальше по мере добавления новых колонок таким странным методом).
Рекомендую посмотреть в сторону pgcompacttable или pg_reorg (или старого доброго vacuum full если у вас относительно свежая версия базы), и посмотреть на baseline размер таблицы и индексов (а не на текущие распухшие вашими стараниями значения).

PS: при наличии 5 индексов в таблице это вполне нормально что в сумме они будут занимать больше чем таблица (особенно если сама таблица узкая).

PPS: по 1/2/4 - NULL значения в поле тоже индексируются если вы не сделали специально условный индекс по NOT NULL то ваши незаполненные значения будут в индексе.
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39258899
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторв пж поля типа char (не чар(1)) всё сказал г-н лавров
а пж это кто?
я посмотрел в pgadmin у меня колонки character и указана длинна. Это не правильно?
автору вас там что -- джейсоны или иксемель ?
qwwq, не уверен. Если json - данные для людей, а второе xml - то скажу что у меня. 1 и 2 колонка - это мд5 сумма файлов; 3 колонка - это url (только домен и зона, без протокола). это цифровой код, записанный текстом (так как он логично нужен текстом) и 5 колонка - это дата дд.мм.гггг - так как она мне нужна для обработки всё равно только текстом. Это какой тип данных json?
авторставьте плановый реиндекс на каждый 100 тыс -- 1 лям апдейтов, что ли.
то есть команду
ALTER INDEX [ IF EXISTS ] имя RENAME TO новое_имя
а вот товарищ пишет
авторпри наличии 5 индексов в таблице это вполне нормально что в сумме они будут занимать больше чем таблица (особенно если сама таблица узкая).
и еще подскажите, пожалуйста, а как reindex сделать, чтобы он таблицу не блокировал?
---
авторпосле того как вы в таблицу добавили новое поле с default значением - у вас таблицам и индексы выросли в 2 раза автоматически (и с хорошими шансами будут расти дальше по мере добавления новых колонок таким странным методом).
Maxim Boguk, то есть это плохо NULL убирать. Но я наоборот читаю, что любое значение null также занимает место, особенно на boolean всяких. Опять же мне условия выборок упрощаются в написании, мне не надо писать WHERE znak = null OR znak = '' чтобы найти все пустые значения, а достаточно набрать WHERE znak = ''
Я не прав?
авторРекомендую посмотреть в сторону pgcompacttable или pg_reorg (или старого доброго vacuum full если у вас относительно свежая версия базы), и посмотреть на baseline размер таблицы и индексов (а не на текущие распухшие вашими стараниями значения).
почитал. Ничего не понял.
авторNULL значения в поле тоже индексируются если вы не сделали специально условный индекс по NOT NULL то ваши незаполненные значения будут в индексе.
а можно при создании индекса указать, чтобы постгрес значения '' не индексировал? Или какие то определенные значения?
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39258936
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxавторв пж поля типа char (не чар(1)) всё сказал г-н лавров
а пж это кто?
записываю : по лаврову разногласий нет.

с этим закончили.

вопрос:
откуда ж, любезный, у вас там тосты взялись, на 5 коротких полях ?

ну и т.д.
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39258957
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторс этим закончили.
я ничего не понял, но пофиг.
автороткуда ж, любезный, у вас там тосты взялись, на 5 коротких полях ?
в таблице 14 колонок, это индексов 5. Я перечислил только колонки в которых есть индексы. У меня в этой таблице есть поле text, как правило мелкое, килобайт - два.
Если запись обрабатывается, то в поле text обязательно чо то записывается (99.9%). Или я строку удаляю потом.
авторну и т.д.
я ничего не понял, но пофиг.
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39259173
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsx,

1) создайте индекс, такой же, как один из существующих через create index concurrently indexname2 on ...
2) почти наверняка он будет значительно меньше существующего. прочитать про mvcc, bloat, понять почему так происходит
3) удалить старый индекс, новый переименовать (при желании), повторить с остальными

ну или если на сайте две калеки, подождать пока они будут спать и в ночное время запустить vacuum full таблицы с ее полной блокировкой.

4) почитать про частичные (partial) индексы, попробовать создать нужный - сравнить размер, сделать выводы
5) null значение в поле занимает ровно 0 байт (если nullable полей меньше 8) - есть такая особенность
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39259301
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius, спасибо. Создал командой:
Код: plsql
1.
CREATE INDEX CONCURRENTLY имя_индекса ON public.имя_таблицы (имя_поля ASC NULLS LAST);



вместо старого индекса размером 2529 мб, получился индекс 1069 мб.
То есть мне надо после удаления 1 млн записей пересоздавать индексы, удаляя старые - верно? Или как то иначе?
Я верно понимаю, что в индексе на 1000 мб скорость будет в два раза быстрее записи, чем в индексе на 2000 мб?
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39259520
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxЯ верно понимаю, что в индексе на 1000 мб скорость будет в два раза быстрее записи, чем в индексе на 2000 мб?

нет. сильно зависит от того, будет ли нужная часть индекса в памяти. запросы с более мелким индексом могут и на 1% быстрее работать, а могут и в 10 раз быстрее.
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39259558
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius, спасибо за ответ.
Хотя мне это не кажется очень удобным, но правильно ли я понял, что с базами в несколько гигабайт, на которых активно ведется добавление новых записей и удаление старых все администраторы так и делают:
1. создают новый индекс с новым именем;
2. удаляют старый индекс.
И так каждые две недели к примеру?
Второй вопрос. У меня на ssd 51 гб свободен, может как то симплинками перенести индексы на ssd? Или у меня на компьютере 32 гб оперативной памяти, правда 21 гб занят программами. Может как то увеличить оперативную память для индексов?
зы
хотя честно говоря сейчас скорости на выборку мне более чем хватает.
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39260038
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
---
сбор отчета отработал почти в 5 раз быстрее (вместо 5+ минут - 1 минута). Обработка записей (основной процесс) обработал всего на несколько процентов больше (вместо 240 тысяч - 256 тысяч записей). Может быть это из-за индексов.
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39261921
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxХотя мне это не кажется очень удобным, но правильно ли я понял, что с базами в несколько гигабайт, на которых активно ведется добавление новых записей и удаление старых все администраторы так и делают:
1. создают новый индекс с новым именем;
2. удаляют старый индекс.

Никакие администраторы ТАК не делают, может за исключением самых дурных и кривых
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39262032
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JonhsonazsxХотя мне это не кажется очень удобным, но правильно ли я понял, что с базами в несколько гигабайт, на которых активно ведется добавление новых записей и удаление старых все администраторы так и делают:
1. создают новый индекс с новым именем;
2. удаляют старый индекс.
Никакие администраторы ТАК не делают, может за исключением самых дурных и кривых
Не совсем так, но делают. Из-за того, что:
отсутствует REINDEX CONCURRENTLY, т.е. перестроить индекс — блокирует таблицу

используется система контроля схемы (скажем, liquibase) — индекс должен быть и у него должно быть определённое имя.

В результате приходится:
- создавать конкурентно новый индекс
- дропать старый
- переименовывать вновь созданный.
И да, если индекс обеспечивает ключ, то всё совсем печально.
...
Рейтинг: 0 / 0
Сколько весят индексы?
    #39262279
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov, огромное вам спасибо. Теперь всё понятно.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сколько весят индексы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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