Postgresql

給“超級”使用者更多 work_mem

  • March 26, 2018

多年來我注意到的一種常見模式是,隨著數據大小的增加,人們傾向於不斷增加工作記憶體,因此更複雜的查詢仍然可以充分利用記憶體速度,但對於一些極端任務(例如,報告)。

僅對一些很少執行的異常查詢大幅增加該數字可能是有利的。例如,我可能想保留work_mem例如。8 MB 用於正常操作,但隨後使用具有 250 MB 工作記憶體的特定客戶端/使用者執行特定查詢,這樣我就可以在單個會話期間快速地在記憶體中完成大量工作。

這可能嗎?我完全不認為這是一個解決方案嗎?

你有幾種可能性。

為使用者更改work_mem很容易:

ALTER ROLE alice SET work_mem TO '5GB';

如果您可以安排諸如alice使用者執行那些繁重的查詢之類的事情,那麼這可能就足夠了。如果這個數字很大(伺服器上 RAM 的很大一部分),則可以隨時將使用者限制為只有少量連接(甚至 1 個也可能有意義):

ALTER ROLE alice WITH CONNECTION LIMIT 2;

如果這不可行,您可以將查詢儲存為函式。這樣做的好處是您可以在定義函式時或之後設置選擇的參數:

ALTER FUNCTION heavy(integer) SET work_mem TO '2GB';
ALTER FUNCTION very_heavy(integer) SET work_mem TO '13GB';

引用自:https://dba.stackexchange.com/questions/202306