172 похожих чатов

Коллеги, хелп. postgresql 11 есть большая партицированная таблица. добавили партицию, создали

индекс ONLY на родительскую таблицу. далее создали индекс на партицию и прицепили родительскому индексу.

[code]CREATE INDEX CONCURRENTLY i_audit_messages_sectioned_y2021m07_on_operation_code_id ON audit_messages_sectioned_y2021m07(operation_code_id);
ALTER INDEX i_audit_messages_sectioned_on_operation_code_id ATTACH PARTITION i_audit_messages_sectioned_y2021m07_on_operation_code_id;[/code]

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

--- удаляли так, тут без проблем удалилось:

[code]ALTER TABLE audit_messages_sectioned DETACH PARTITION audit_messages_sectioned_y2021m07;
DROP INDEX IF EXISTS i_audit_messages_sectioned_y2021m07_on_operation_code_id;
DROP TABLE audit_messages_sectioned_y2021m07;[/code]

---- затем партиция понадобилась снова. создаем так. все нормально создается

[code]CREATE TABLE IF NOT EXISTS audit_messages_sectioned_y2021m07 PARTITION OF audit_messages_sectioned FOR VALUES FROM ('2021-07-01 00:00:00') TO ('2021-08-01 00:00:00');
CREATE INDEX CONCURRENTLY i_audit_messages_sectioned_y2021m07_on_operation_code_id ON audit_messages_sectioned_y2021m07(operation_code_id);[/code]

--- пытаемся приаттачить индекс

[code]ALTER INDEX i_audit_messages_sectioned_on_operation_code_id ATTACH PARTITION i_audit_messages_sectioned_y2021m07_on_operation_code_id;
ERROR: cannot attach index "i_audit_messages_sectioned_y2021m07_on_operation_code_id" as a partition of index "i_audit_messages_sectioned_on_operation_code_id"
DETAIL: Another index is already attached for partition "audit_messages_sectioned_y2021m07"[/code]

--- то есть он есть, его удаляли, пересоздавали, но он волшебно есть в родительской таблице
--- ну ок, есть и хорошо. смотрим как работает, а работает как-будто его нет

EXPLAIN select operation_code_id from audit_messages_sectioned_y2021m07 order by operation_code_id;
QUERY PLAN
--------------------------------------------------------------------------------------------
Sort (cost=715.46..729.36 rows=5560 width=4)
Sort Key: operation_code_id
-> Seq Scan on audit_messages_sectioned_y2021m07 (cost=0.00..369.60 rows=5560 width=4)
(3 rows)

--- а его дружок, с которым это не выделывали работает нормально

[code]EXPLAIN select operation_code_id from audit_messages_sectioned_y2021m08 order by operation_code_id;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Index Only Scan using i_audit_messages_sectioned_y2021m08_on_operation_code_id on audit_messages_sectioned_y2021m08 (cost=0.56..1048590.12 rows=40380104 width=4)
(1 row)[/code]

отбросим в негодовании вопрос "Кто виноват?" (прошлые админы), а обратимся к вопросу "Что делать?"

28 ответов

150 просмотров

>а обратимся к вопросу "Что делать?" Прекратить партицыонировать таблицу с жалкими 5 млрд значений. Но это так. А про скорость запроса у нас есть закреп: https://t.me/pgsql/303899 со списком начальной информацыи для разговора. И есть скрипт для получения этого всего одним скриптом: https://t.me/pgsql/476688 .

Кстати, уверяю вас — запросам глубоко безразлично, выполнен там attach index на родительскую или нет. Единственное, для чего attach index нужэн — чтобы он дропался вместе с родительским индэксом и не дропался сам по себе.

Вообще, можно конечно и так заметить, что реалистичных варианта почему неиспользуется конкретно этот индэкс конкретно в этом запросе два: или индэкс нетакой какой-то (недостроился ещё, например. Или на самом деле он другого типа) — или там на таблицу VACUUM не прошёл, и оно считает, что index-only по факту превратится просто в index scan, потому будет дольшэ. Но это всё... В общем, можэте попытаться разобраться сами, а нам — нужна информацыя из https://t.me/pgsql/303899 чтобы тут в угадайку не играть совсем уж.

Talifa-Kumi Автор вопроса
Talifa-Kumi Автор вопроса
Ilya Anfimov
Без разницы.

я думала, что индекс на партицию создается быстрее чем на всю таблицу. когда приаттачиваем как бы добавляем в общий индекс. но вопрос в другом. удалили партицию, создали ее же. индекс на партицию создали. а он в родительской уже как-бы есть, но как-бы нет. вот это вот проблема

Talifa Kumi
я думала, что индекс на партицию создается быстрее...

Ещё раз — для скорости запросов это не проблема. Планировщику без разницы, куда индэкс приаттачен.

Talifa-Kumi Автор вопроса
Ilya Anfimov
Ещё раз — для скорости запросов это не проблема. П...

это понятно. но запрос индекса не видит. а в соседней партиции которую не удаляли - видит

Talifa Kumi
я думала, что индекс на партицию создается быстрее...

Вообще, можэте \d+ на родительскую таблицу показать — посмотрим, что там куда из индэксов реально подцэплено. Но, реально, по вопросу скорости — вы нетуда копаете.

Talifa-Kumi Автор вопроса
Ilya Anfimov
Вообще, можэте \d+ на родительскую таблицу показат...

"i_audit_messages_sectioned_on_operation_code_id" btree (operation_code_id). есть в родительской, куда б он делся

Talifa Kumi
"i_audit_messages_sectioned_on_operation_code_id" ...

Мне нужны не рассуждения, а \d+ . С рассуждениями вы ведь всё равно в непонятках каких-то, не так ли?

Talifa-Kumi Автор вопроса
Ilya Anfimov
https://t.me/pgsql/509893

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

Talifa-Kumi Автор вопроса
Ilya Anfimov
Мне нужны не рассуждения, а \d+ . С рассуждениями...

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

Talifa Kumi
основной вопрос в том, что при удалении партиции и...

Я неуверен в справедливости этого утверждения. Возможно, это так и там какой-то баг. Но вполне вероятно, что никакого бага нет — и реальная структура отличается от вашых представлений.

Talifa-Kumi Автор вопроса
Ilya Anfimov
Я неуверен в справедливости этого утверждения. Во...

"Возможно, это так и там какой-то баг." это поняно сразу. вопрос что делать

Talifa Kumi
"Возможно, это так и там какой-то баг." это поняно...

"Когда программисты обвиняют комплиятор в ошыбке, обычно они делают сразу две ошыбки. Включая ту, в которой обвиняют компилятор"

Talifa Kumi
"Возможно, это так и там какой-то баг." это поняно...

(На самом деле, я подозреваю, что индэкс и так создался приаттаченным при создании партицыи. А вашэ ручное создание индэкса — только создало второй такой жэ. Но это потому, что у меня утро, кофе, и я занимаюсь безсмысленным гаданием на кофейной гуще.)

Talifa Kumi
"Возможно, это так и там какой-то баг." это поняно...

Вообще, жэлающие могут посмотреть в pg_catalog. — и выяснить, что там за индэкс приаттачен с таким именем, почему и где он лежыт и с каких времён остался. Тожэ метод, к тому жэ неплохая тренировка разборок с каталогом постгреса.

Talifa-Kumi Автор вопроса
Ilya Anfimov
Вообще, жэлающие могут посмотреть в pg_catalog. — ...

видимо у вас зародилось подозрение, что я туда не смотрела?

Talifa Kumi
видимо у вас зародилось подозрение, что я туда не ...

Никогда об этом не думал, и вообще это не относится к делу.

Talifa Kumi
по моему я все что нужно изложила, и я не про скор...

Неужели на препирательства в чате последние полчаса времени хватает, а на то, чтобы приложить \d+ - нет?

Ilya Anfimov
Небось, секретная структура таблиц.

С названиями колонок кириллицей

Talifa Kumi
\d+ audit_messages_sectioned

Так на pastebin кидайте, особенно если там много.

Talifa Kumi
\d+ audit_messages_sectioned

Или файлом, да. (Знаю людей, которые нелюбят, когда текст в телеге кидают файлом — но мне норм, например).

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Всем привет! Использую gitlab-ci. Настроил gitlab-agent для деплоя в куб. При деплое проекта в логах такая ошибка: Executing deploy plan failed to watch "ns:my-project/Ingress...
Konstantin Moiseev
4
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта