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

Друзья, подскажите плз. Есть таблица очень маленькая, записей в 20-30. Но по

ней происходит очень-очень много чтений.
И explain показывает, что происходит seq scan.
Можно ли закэшировать эту таблицу, чтобы данные в большинстве случаев брались из кэша?

26 ответов

12 просмотров

Она и так закэшырована. Ну, скорее всего. Данные из кэша (shared_buffers) вымываются по LRU -- если с прошлого чтения все shared_buffers не повыкидывались -- то останутся там.

если там записей 20-30, чего там кешировать то ? вот и постгрес видимо так же думает, что ему сканить все быстрее, чем читать индекс)

И да, "почему происходит seq scan" -- это другой вопрос (в данном случае -- вполне очевидный).

Так вот, seq scan -- потому, что b-tree index lookup это относительно сложная процэдура. Во много раз более сложная, чем тупо взять tuple из странички. Потому 30 туплов быстрее просто взять, чем пытаться их как-то искать по индэксу (там, кстати, тожэ одна страничка будет, из которой, скорее всего, придётся этих туплов вытащить штук 5 чтобы найти нужный).

whois- Автор вопроса
Сергей Кравчук
если там записей 20-30, чего там кешировать то ? в...

Да, похоже на то. Но меня смущает то, что иногда, когда очень много запросов, то происходит торможение. При чем время запроса может увеличиваться до 400 мс. А на графике я вижу "свечу". При чем, в статистике локов нет.... Я подумал, вдруг можно как-то в оперативку / shared ...что-то там положить

Ilya Anfimov
Она и так закэшырована. Ну, скорее всего. Данные и...

Насколько я помню, seq scan не через shared buffers проходит или не всегда через него. Для этого ограниченный ring buffer используется.

whois- Автор вопроса
Ilya Anfimov
Так вот, seq scan -- потому, что b-tree index look...

Это и так очевидно. Я говорю, что мне нужно еще быстрее!

Milkhael
Насколько я помню, seq scan не через shared buffer...

Вообще не помню никакого ring buffer в postgres. А seq scan происходит всегда через shared buffers, разумеется -- никаких других методов поднять страницу, лежащую на диске у postgres просто нет.

whois
Это и так очевидно. Я говорю, что мне нужно еще бы...

может нужно кешировать результат на стороне приложения ? чтобы не дергать то что особо не изменяется , а если и дергать то реже ?

whois- Автор вопроса
whois
Да, похоже на то. Но меня смущает то, что иногда, ...

Но вообще да, с предсказуемостью скорости и realtime у постгреса не очень всё хорошо.

whois- Автор вопроса
Ilya Anfimov
Уж не в моменты checkpoint ли?

Кстати, в этом направлении я не смотрел...

Ilya Anfimov
Вообще не помню никакого ring buffer в postgres. А...

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

whois- Автор вопроса
Ilya Anfimov
Уж не в моменты checkpoint ли?

А как проверить, что это checkpoint?

А на хосте, где PG стоит ничего другого не запущено?

whois- Автор вопроса
Milkhael
А на хосте, где PG стоит ничего другого не запущен...

Да, запущено. Параллельно несколько баз) Я тоже предположил, что они афектят. Но я не админ и не дба. Вот гадаю

whois
Да, запущено. Параллельно несколько баз) Я тоже пр...

Ну это плохо, конечно. PG использует страничный кэш операционной системы. Поэтому несколько баз могут афектить друг друга. Одна бд может загрязнять страничный кэш своими данными и вытеснять страницы другой бд, что приведет в дальнейшем к чтению с диска, а не из страничного кэша

Milkhael
Ну это плохо, конечно. PG использует страничный кэ...

А общих страниц у двух кластеров априори не должно быть

whois
А как проверить, что это checkpoint?

Есть параметр log_checkpoints.

Milkhael
Ну это плохо, конечно. PG использует страничный кэ...

Но на маленьку таблицу можно поставить грелочку, чтобы из shared_buffers её никогда не выкидывало!

> Но по ней происходит очень-очень много чтений. А откуда Вы получили вот эту информацию, конкретно?

whois- Автор вопроса
Ilya Anfimov
Но на маленьку таблицу можно поставить грелочку, ч...

тут уж зависит от многих факторов и "никогда" врядли можно гарантировать

Milkhael
тут уж зависит от многих факторов и "никогда" вряд...

К сожалению да. Надо, надо брать себя за шкирку и писать расшырение, которое memloчит указанные страницы!

Milkhael
тут уж зависит от многих факторов и "никогда" вряд...

Точнее, прибивает их в shared buffers в первую очередь. Мемлочить -- во вторую, там несложно ужэ.

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
61
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Привет всем. Не знаю, удачный ли чатик я выбрал для вопроса, но он как будто в целом про концепцию фп и конкретно про Haskell. Прочитал, что в целом в мире фп нет идеи мутабел...
Gellert Cringewald
15
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Как добавить ссылку в Быстрый доступ в Проводнике windows 10? Нашёл, как на power shell сделать, но может есть способ через Дельфи?
А
31
@helgispbru @Dreamer_0x01 @Pathologic93 @webber_12 Не уверен, что вам всем это жутко интересно, но в продолжение недавнего диалога отправлю свои наброски. Хочу понять, правил...
Андрей [aharito] Харитонов
13
Карта сайта