powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разделение кэша между коннектами
25 сообщений из 48, страница 1 из 2
Разделение кэша между коннектами
    #33577215
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос по архитектуре PG, в частности PG 8.1.3 Win.
Имеют ли все коннекты к базе один общий кэш, или же каждому отдельно выделяется память под кэш?

В документации не нашел ответа на этот вопрос, хотя, конечно, читал по диагонали
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33577807
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Гoлдун
Имеют ли все коннекты к базе один общий кэш, или же каждому отдельно выделяется память под кэш?


мое мнение - кэш раздельный (если он общий - я не вижу, где он при помощи стандартных средств исследований процессов).
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33577832
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dragonlord пишет:

> мое мнение - кэш раздельный

Т.е. достоверной информации кроме мнений об этом нет? Что ж,
спасибо и на этом.

> (если он общий - я не вижу, где он при помощи стандартных средств
> исследований процессов).

Значит на каждый коннект создается отдельный процесс, а не поток в
рамках одного серверного процесса?

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33577847
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Гoлдун
Т.е. достоверной информации кроме мнений об этом нет? Что ж,
спасибо и на этом.


почему же ;) можно порыть исходные тексты, если очень принципиально.

Александр Гoлдун
Значит на каждый коннект создается отдельный процесс, а не поток в
рамках одного серверного процесса?


совершенно верно. отдельный процесс postgres.exe с собственным pid и всеми делами. насчет потоков какие-то эксперименты проводятся в сообществе, но не очень понятно, в чем смысл - вряд-ли это принесет повышение эффективности для сервера в целом.
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578004
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dragonlord пишет:

> совершенно верно. отдельный процесс postgres.exe с собственным pid и
> всеми делами. насчет потоков какие-то эксперименты проводятся в
> сообществе, но не очень понятно, в чем смысл - вряд-ли это принесет
> повышение эффективности для сервера в целом.

Э.... Как бы попонятнее объяснить преимущества общего кэша? А разве их
нужно объяснять? Но если действительно нужно, то могу на пальцах, на
примерах и т.п. Я почему-то думал что кэш там общий.

В общем, это одновременно и удивило, и разочаровало, и охладило
исследовательский пыл. Просто давно посматривал в сторону PG как на
потенциальную альтернативу другим СУБД
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578095
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Гoлдун
Э.... Как бы попонятнее объяснить преимущества общего кэша? А разве их
нужно объяснять? Но если действительно нужно, то могу на пальцах, на
примерах и т.п. Я почему-то думал что кэш там общий.

В общем, это одновременно и удивило, и разочаровало, и охладило
исследовательский пыл. Просто давно посматривал в сторону PG как на
потенциальную альтернативу другим СУБД


"попонятнее" не требуется, тем более что это спорное мнение ;) общий кэш данных бд организуется при помощи тривиального дискового кэша, которому все равно, кто и что читает/пишет. А вот когда у вас 16 камней в сервере и вы не заставляете их конкурентно обращаться к одному и тому же участку памяти - это несколько быстрее, чем если все-таки заставляете ;)

помимо прочего - это мое личное мнение про кэш процессов. не претендует на абсолютную истину ;)
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578107
Gold Fish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помоему раздельные процессы довольно неплохой выход. Особенно на могопроцессорных системах.
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578149
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gold FishПомоему раздельные процессы довольно неплохой выход. Особенно на могопроцессорных системах.

100% согласен. тем более, что каждый процесс postgreSQL (8.1.x) состоит не из 1 потока в типичной ситуации, что позволяет, допустим, просто управлять приоритетами. Это только первое самое очевидное преимущество.
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578203
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dragonlord пишет:

> "попонятнее" не требуется, тем более что это спорное мнение ;)

В чем спорное? Преимущества общего кэша очень четко проявляются в
меньших требованиях к памяти и уменьшении дискового I/O при
многопользовательской работе, когда большинство сессий используют в
основном одни и те же данные. А если основной объем требуемых данных еще
и в память помещается, то вообще операции чтения с диска стремятся к нулю.

А в чем преимущества раздельного кэша?

> общий кэш
> данных бд организуется при помощи тривиального дискового кэша, которому
> все равно, кто и что читает/пишет.

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

> А вот когда у вас 16 камней в сервере
> и вы не заставляете их конкурентно обращаться к одному и тому же участку
> памяти - это несколько быстрее, чем если все-таки заставляете ;)

Быстрее чем что? Чем обращение к диску?

Ладно, спор достаточно бестолковый получается. Спасибо за ликбез по
устройству PG.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578221
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shared Memory.
Даже параметр в postgresql.conf есть: shared_buffers.
Это память общая для всех процессов - общий кеш.
Правда ее не всегда стоит делать большой. Чаще полезнее сделать больше work_mem - именно эта память используется для сортировок и т.д. и она у каждого процесса/коннекта своя.
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578264
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Funny_FalconShared Memory.
Даже параметр в postgresql.conf есть: shared_buffers.
Это память общая для всех процессов - общий кеш.
Правда ее не всегда стоит делать большой. Чаще полезнее сделать больше work_mem - именно эта память используется для сортировок и т.д. и она у каждого процесса/коннекта своя.

а он какому процессу должен принадлежать? postmaster?
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578267
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так значит буферный пул всё же общий?
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578385
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Просто давно посматривал в сторону PG

Давно - это с момента прочтения новости о релизе 1С под Линакс? ;) Страшно стало? ;) Правильно, Александр, бойтесь. Не место форточкам на сервере (с). ;)))
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578393
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621 пишет:
> > Просто давно посматривал в сторону PG
>
> Давно - это с момента прочтения новости о релизе 1С под Линакс? ;)

Какое это имеет отношение к заданному вопросу, с ответом на который,
кстати, местные обитатели так и не пришли к консенсусу?

Тем не менее отвечу. Интерес появился достаточно давно еще во времена
версий 7.х, когда я еще держал некоторые серверы под linux. C момента
появления 8.0 под win интерес немного усилился.

> Страшно стало? ;) Правильно, Александр, бойтесь.

Нет, не стало. Чего мне Вас, пустозво... ой, то есть я хотел сказать
флеймеров бояться?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578482
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Чего мне Вас, пустозво... ой, то есть я хотел сказать флеймеров бояться?

;))) Ну-ну.
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33578502
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да -буфер общий. Из него выделяются страницы каждому форкнутому процессу
минимум 8 кб на процесс. Все процессы(бакэнды) работают с этим общим пулом механизмами shared memory
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33579002
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> Просто давно посматривал в сторону PG

Давно - это с момента прочтения новости о релизе 1С под Линакс? ;) Страшно стало? ;) Правильно, Александр, бойтесь.

Много баяцца - на mssql сидеть :)
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33579526
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landy пишет:
> Да -буфер общий. Из него выделяются страницы каждому форкнутому процессу
> минимум 8 кб на процесс.

Каждому отдельно выделяются?

> Все процессы(бакэнды) работают с этим общим пулом механизмами shared memory

Ладно, переформулирую вопрос на пальцах, ибо чтение в доке раздела
17.4.1. Memory, где упоминается shared_buffers, не прояснило ситуацию.
Итак, запустили сервер. Подключился user1. Отправил запрос
SELECT * FROM table_name и зафетчил себе результат. Сервер считал данные
с диска и выдал.
Подключился user2. Отправил тот же самый запрос. Вопрос: Откуда сервер
взял данные для выдачи user2?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33579621
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Гoлдун
Ладно, переформулирую вопрос на пальцах, ибо чтение в доке раздела
17.4.1. Memory, где упоминается shared_buffers, не прояснило ситуацию.
Итак, запустили сервер. Подключился user1. Отправил запрос
SELECT * FROM table_name и зафетчил себе результат. Сервер считал данные
с диска и выдал.
Подключился user2. Отправил тот же самый запрос. Вопрос: Откуда сервер
взял данные для выдачи user2?


упомянутые выше shared buffers используются для обеспечения функционирования механизма транзакций и lock tables (см. postgresql.conf). То есть, чем больше вы хотите допустить отдельных подсоединений клиентов к БД, тем выше требования к объему разделяемой памяти. Данные запросов берутся для каждого процесса сепаратно. И это правильно, потому что даже при однотипной работе пользователей с запросами одинаковые сценарии выполнения встречаются далеко не каждый раз. Кроме того, современные windows-системы довольно хитро работают с памятью при наличии более одного полноценного процессорного ядра, так что конкурентное обращение в общий пул становится тормознее чем обращение к разным участкам памяти.
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33579717
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dragonlord пишет:

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

Жалко терять время на спор, правильно ли это и объяснять очевидные
(причем очевидные далеко не мне одному) вещи. В определенных задачах и
условиях такое поведение действительно непринципиально или может быть
даже лучше общего кэша.

Спасибо за информацию.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33579723
Fabrichenko Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вот чего прочитал мне кажется что всетаки буффер общий

автор Page Caching
Two of the fundamental performance rules in any database system are:

Memory access is fast; disk access is slow.

Memory space is scarce; disk space is abundant.

Accordingly, PostgreSQL tries very hard to minimize disk I/O by keeping frequently used data in memory. When the first server process starts, it creates an in-memory data structure known as the buffer cache. The buffer cache is organized as a collection of 8K pageseach page in the buffer cache corresponds to a page in some page file. The buffer cache is shared between all processes servicing a given database.

When you select a row from a table, PostgreSQL will read the heap block that contains the row into the buffer cache. If there isn't enough free space in the cache, PostgreSQL will move some other block out of the cache. If a block being removed from the cache has been modified, it will be written back out to disk; otherwise. it will simply be discarded. Index blocks are buffered as well.

PostgreSQL databases, Second Edition
By Korry Douglas, Susan Douglas


------------------------------------
жизнь как пестня
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33579767
Fabrichenko Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ это правильно, потому что даже при однотипной работе пользователей с запросами одинаковые сценарии выполнения встречаются далеко не каждый раз.

есть приложение например сайт или какие нибудь окошки для тетенек бухгалтерш

как устроенно приложение? ну наверняка какой нить клиент-сервер. что это значит? это значит что тетеньки (и уж темболее посетители сайта) скорее всего тыкают по одинаковым окошкам (в основной своей массе), а знаете что это значит? да правильно они хотят видеть одни и те же данные! отсюда вывод нефиг лазить на ЖД если у меня эта таблица лежит в памяти.

ИМХО конечно ;-)

--------------------------------------------
жизнь как пестня
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33579962
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fabrichenko Viktor пишет:

> я вот чего прочитал мне кажется что всетаки буффер общий

Поразительно. У кого-то мнение, кому-то кажется, в документации внятно
не сказано (по крайней мере я не смог найти)

> buffer cache is organized as a collection of 8K pageseach page in the
> buffer cache corresponds to a page in some page file. The buffer cache
> is shared between all processes servicing a given database.

Вроде похоже, но все равно невнятно, как именно этот кэш shared между
разными коннектами. То ли каждому дается отдельный кусок этого кэша,
либо все же коннекты могут обращаться к страницам, сохраненным там ранее
другими процессами.

Еще "мнения" есть? ;)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33579988
Fabrichenko Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется потому что я не очень силен в пиндосском, но вот эта фраза меня убеждает все больше и больше в том что буфер общий. Цитата из книжки по постгресу ее я написал

авторThe buffer cache is shared between all processes servicing a given database.

When you select a row from a table, PostgreSQL will read the heap block that contains the row into the buffer cache.

следовательно другой коннект к этой базе начнет искать данные сначала в кеше а потом только полезет на диск.
------------------------------------
жизнь как пестня
...
Рейтинг: 0 / 0
Разделение кэша между коннектами
    #33580025
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему тут этот вопрос никто глубоко не знает - поэтому и гадают..
Ответ по моему мнению нужно искать заслав вопрос в конфу разработчиков на postgresql.org
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разделение кэша между коннектами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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