Size: a a a

pgsql – PostgreSQL

2021 March 18

YS

Yaroslav Schekin in pgsql – PostgreSQL
Denis
Ярослав, я всегда исхожу из предположения, что люди, все же сначала читают документацию, потом идут спрашивать у других людей.
Если человек пришел в тематический чат задать вопрос, скорее всего, он документацию прочел, но осознать на пальцах не удалось и требуется помощь именно в этом.
Далее, истина рождается в диалоге, а не в отверждении вроде "он не прав, потому что я так сказал"
Я допускаю что при высокой компетенции в вопросе легко упустить данный момент, тем не менее, это не перестает быть грубым и не профессиональным
Послушайте... я Вам дал ответ, и задал вопрос, вот тут https://t.me/pgsql/290911
Вы ответили на него (хотя бы, для себя)? Далее, из процитированной документации, как мне кажется, правильный ответ ясен.
Если всё равно непонятно — задавайте конкретные вопросы (всю документацию пересказывать как-то не хочется).

> "он не прав, потому что я так сказал"

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

D

Denis in pgsql – PostgreSQL
Как я понял документацию:

vacuum_cost_page_hit
 (integer)
The estimated cost for vacuuming a buffer found in the shared buffer cache. It represents the cost to lock the buffer pool, lookup the shared hash table and scan the content of the page. The default value is one.


Данные находятся в shared_buffers но нет на диске?

vacuum_cost_page_miss (integer)
The estimated cost for vacuuming a buffer that has to be read from disk. This represents the effort to lock the buffer pool, lookup the shared hash table, read the desired block in from the disk and scan its content. The default value is 10.


Данные есть и на shared_buffers и на диске и это одни и те же данные?

vacuum_cost_page_dirty (integer)
The estimated cost charged when vacuum modifies a block that was previously clean. It represents the extra I/O required to flush the dirty block out to disk again. The default value is 20.


Данные есть и в shared_buffers в грязном виде (flush на диск еще не произошел) и на диске есть их старая версия?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Denis
Как я понял документацию:

vacuum_cost_page_hit
 (integer)
The estimated cost for vacuuming a buffer found in the shared buffer cache. It represents the cost to lock the buffer pool, lookup the shared hash table and scan the content of the page. The default value is one.


Данные находятся в shared_buffers но нет на диске?

vacuum_cost_page_miss (integer)
The estimated cost for vacuuming a buffer that has to be read from disk. This represents the effort to lock the buffer pool, lookup the shared hash table, read the desired block in from the disk and scan its content. The default value is 10.


Данные есть и на shared_buffers и на диске и это одни и те же данные?

vacuum_cost_page_dirty (integer)
The estimated cost charged when vacuum modifies a block that was previously clean. It represents the extra I/O required to flush the dirty block out to disk again. The default value is 20.


Данные есть и в shared_buffers в грязном виде (flush на диск еще не произошел) и на диске есть их старая версия?
> Данные находятся в shared_buffers но нет на диске
такое может быть только для новых страниц, для которых вакуум не нужен.

hit — странице уже в кэше
miss — пришлось читать с диска в кэш
dirty — испачкали страницу (вакуум что-то сделал)
источник

D

Denis in pgsql – PostgreSQL
он еще ничего не сделал же, мы только настраиваем его как ему работать не?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Denis
он еще ничего не сделал же, мы только настраиваем его как ему работать не?
кто ничего не сделал, DBA?
источник

D

Denis in pgsql – PostgreSQL
или это наоборот, сделал что-то, проставил вес, и исходя из этого веса смотрит продолжать ему дальше что-то делать или ждать?
источник

D

Denis in pgsql – PostgreSQL
Victor Yegorov
кто ничего не сделал, DBA?
автовакуум
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Denis
Как я понял документацию:

vacuum_cost_page_hit
 (integer)
The estimated cost for vacuuming a buffer found in the shared buffer cache. It represents the cost to lock the buffer pool, lookup the shared hash table and scan the content of the page. The default value is one.


Данные находятся в shared_buffers но нет на диске?

vacuum_cost_page_miss (integer)
The estimated cost for vacuuming a buffer that has to be read from disk. This represents the effort to lock the buffer pool, lookup the shared hash table, read the desired block in from the disk and scan its content. The default value is 10.


Данные есть и на shared_buffers и на диске и это одни и те же данные?

vacuum_cost_page_dirty (integer)
The estimated cost charged when vacuum modifies a block that was previously clean. It represents the extra I/O required to flush the dirty block out to disk again. The default value is 20.


Данные есть и в shared_buffers в грязном виде (flush на диск еще не произошел) и на диске есть их старая версия?
> Данные находятся в shared_buffers но нет на диске?

Чтобы данные были в shared_buffers, но не на диске, страница должна быть новой (т.е. это бывает не так часто).
Т.е. это просто значит, что страница в shared buffers есть.

> Данные есть и на shared_buffers и на диске и это одни и те же данные?

Нет. В этом случае этой страницы в shared_buffers как раз нет, и её надо прочитать.

> Данные есть и в shared_buffers в грязном виде (flush на диск еще не произошел) и на диске есть их старая версия?

Нет. В этом случае страница чистая (т.е. есть в shared buffers, и её содержимое совпадает с тем, что есть на диске).
Т.е. это стоимость того, что в результате работы vacuum она станет грязной.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Denis
или это наоборот, сделал что-то, проставил вес, и исходя из этого веса смотрит продолжать ему дальше что-то делать или ждать?
это цена разных “ситуаций”. каждый раз, когда подобная “ситуация” возникает, стоимость увеличивается на указанное значение.
когда стоимость достигает vacuum_cost_limit, то:
- вакуум ждёт vacuum_cost_delay
- отнимает от накопленной стоимости значение vacuum_cost_limit (ну уверен, что просто обнуляет)
- продолжает работу
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Denis
или это наоборот, сделал что-то, проставил вес, и исходя из этого веса смотрит продолжать ему дальше что-то делать или ждать?
Вы не пробовали ту же документацию по-русски прочитать (на сайте postgres pro где-то есть перевод)? Может, так понятнее будет?
источник

s

sexst in pgsql – PostgreSQL
Я это про грязную страницу час назад почти написал, что вы тут по кругу объясняете то всё?)
источник

D

Denis in pgsql – PostgreSQL
Yaroslav Schekin
Вы не пробовали ту же документацию по-русски прочитать (на сайте postgres pro где-то есть перевод)? Может, так понятнее будет?
пробовал, по английски понятнее )
источник

VY

Victor Yegorov in pgsql – PostgreSQL
sexst
Я это про грязную страницу час назад почти написал, что вы тут по кругу объясняете то всё?)
в нас теплится призрачная надежда, что мы что-то не так объясняем…
источник

D

Denis in pgsql – PostgreSQL
Victor Yegorov
это цена разных “ситуаций”. каждый раз, когда подобная “ситуация” возникает, стоимость увеличивается на указанное значение.
когда стоимость достигает vacuum_cost_limit, то:
- вакуум ждёт vacuum_cost_delay
- отнимает от накопленной стоимости значение vacuum_cost_limit (ну уверен, что просто обнуляет)
- продолжает работу
отнимает до того как что-то сделать или после?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Denis
отнимает до того как что-то сделать или после?
в процессе же. вы понимаете что делает вакуум? вы понимаете, зачем эта система костов сделана?
источник

s

sexst in pgsql – PostgreSQL
Denis
отнимает до того как что-то сделать или после?
У вакуума есть vacuum_cost_limit токенов на каждый новый запуск. Каждое действие уменьшает этот запас на свой cost. Закончились токены - останавливаем чистку, уходим спать до слежующего запуска
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Denis
пробовал, по английски понятнее )
Но поняли Вы её почти наоборот. :( Причём, Ваше понимание явно противоречит тому, что написано чёрным по белому — я поэтому и предложил.
источник

s

sexst in pgsql – PostgreSQL
Не именно так, но логически тождественно работает
источник

D

Denis in pgsql – PostgreSQL
Victor Yegorov
в процессе же. вы понимаете что делает вакуум? вы понимаете, зачем эта система костов сделана?
понимаю, сюда пришел чтобы понять сильнее.
Итого что вынесено на данный момент:

есть vacuum_cost_limit
автомакуум смотрит на его значение
видит страницу которую хочет пометить как удаленную и разрешить ее переиспользование на будущее
Если страница есть в шаредбуферс то нужно отнять 1 от оставшегося vacuum_cost_limit и есть vacuum_cost_limit  > 0   сделать свое дело

Если страницы нет, все то же самое, но отнять 10

Если есть но данные "грязные" - все тоже самое, но отнять 30

так?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Denis
понимаю, сюда пришел чтобы понять сильнее.
Итого что вынесено на данный момент:

есть vacuum_cost_limit
автомакуум смотрит на его значение
видит страницу которую хочет пометить как удаленную и разрешить ее переиспользование на будущее
Если страница есть в шаредбуферс то нужно отнять 1 от оставшегося vacuum_cost_limit и есть vacuum_cost_limit  > 0   сделать свое дело

Если страницы нет, все то же самое, но отнять 10

Если есть но данные "грязные" - все тоже самое, но отнять 30

так?
не совсем. сначала делаем операцию, затем отнимаем её цену (по операции), затем, если пробили лимит, спим.
источник