Skip to content

Функция mamonsu.buffer_cache() и переменная work_mem #167

Open
@sgrinko

Description

@sgrinko

Уважаемые разработчики прошу добавить в код bootstrap режима в разворот функции mamonsu.buffer_cache() настройку переменной окружения work_mem, вот таким образом:

    select '''' || case when current_setting('shared_buffers') like '%GB'
                        then (replace(current_setting('shared_buffers'), 'GB', '')::int)*1024
                        else replace(current_setting('shared_buffers'), 'MB', '')::int
                   end * 0.0117 || ' MB''' as highpage_mb \gset
    ALTER FUNCTION mamonsu.buffer_cache() SET WORK_MEM = :highpage_mb; -- for shared_buffers 16 Гб -> 200 Мб

Коэффициент 0.0117 подобран так, чтобы выделенного места в ОЗУ хватало для сохранения всех данных запроса в ОЗУ, но не на диске.
Если такого не делать, тогда каждый период времени срабатывания плагина pg_buffercache.py если default значение переменной work_mem меньше рассчитанной (обычно это так и есть), мы получаем на графике временных файлов регулярные столбики :) что не есть хорошо, с точки зрения мониторинга за проблемными запросами.
изображение
а в логах мы будем видеть подобные строки:

2021-09-13 13:47:28.973 MSK [21987-13] app=[mamonsu],client=[127.0.0.1(12942)] [mamonsu@mamonsu], [vxid:7/257917 txid:0] [SELECT] LOG:  
    temporary file: path "base/pgsql_tmp/pgsql_tmp21987.4", size 962216
2021-09-13 13:47:28.973 MSK [21987-14] app=[mamonsu],client=[127.0.0.1(12942)] [mamonsu@mamonsu], [vxid:7/257917 txid:0] [SELECT] CONTEXT:  
    SQL function "buffer_cache" statement 1
2021-09-13 13:47:28.973 MSK [21987-15] app=[mamonsu],client=[127.0.0.1(12942)] [mamonsu@mamonsu], [vxid:7/257917 txid:0] [SELECT] STATEMENT:  
    select size, twice_used, dirty from mamonsu.buffer_cache()

Это особенно актуально для тех, у кого shared_buffers довольно велик.
Тем более, что такая доработка улучшает время работы данной функции и убирает лишнюю запись на диск.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions