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

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

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

26 ответов

35 просмотров

Она и так закэшырована. Ну, скорее всего. Данные из кэша (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 в первую очередь. Мемлочить -- во вторую, там несложно ужэ.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта