给“超级”用户更多的 work_mem

oro*_*aki 5 postgresql memory configuration

多年来我注意到的一种常见模式是,人们倾向于随着数据大小的增加而不断增加工作内存,因此更复杂的查询仍然可以充分利用内存速度,但对于某些极端任务(例如,报告)。

仅对一些很少运行的异常查询大幅增加该数字可能是有利的。例如,我可能想保持work_mem在例如。8 MB 用于正常操作,然后使用具有 250 MB 工作内存之类的特定客户端/用户运行特定查询,以便我可以在单个会话期间完全在内存中快速执行重大操作。

这可能吗?我是否完全不考虑将其视为解决方案?

dez*_*zso 6

你有几种可能性。

work_mem用户更改很容易:

ALTER ROLE alice SET work_mem TO '5GB';
Run Code Online (Sandbox Code Playgroud)

如果您可以安排诸如alice用户运行那些繁重的查询之类的事情,这可能就足够了。如果这个数字很大(您服务器上的 RAM 的很大一部分),则可以随时限制用户只有少量连接(即使是 1 也可能有意义):

ALTER ROLE alice WITH CONNECTION LIMIT 2;
Run Code Online (Sandbox Code Playgroud)

如果这不可行,您可以将查询存储为函数。这样做的好处是您可以在定义函数时或之后设置所选参数:

ALTER FUNCTION heavy(integer) SET work_mem TO '2GB';
ALTER FUNCTION very_heavy(integer) SET work_mem TO '13GB';
Run Code Online (Sandbox Code Playgroud)