Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
sgrinko opened this issue Sep 13, 2021 · 1 comment
Open
Milestone

Comments

@sgrinko
Copy link
Contributor

sgrinko commented Sep 13, 2021

Уважаемые разработчики прошу добавить в код 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 довольно велик.
Тем более, что такая доработка улучшает время работы данной функции и убирает лишнюю запись на диск.

@sgrinko
Copy link
Contributor Author

sgrinko commented Oct 14, 2021

Прошу включить эту доработку в версию 3.1.0

@cuprumtan cuprumtan added this to the next milestone Aug 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants