Postgresql
給“超級”使用者更多 work_mem
多年來我注意到的一種常見模式是,隨著數據大小的增加,人們傾向於不斷增加工作記憶體,因此更複雜的查詢仍然可以充分利用記憶體速度,但對於一些極端任務(例如,報告)。
僅對一些很少執行的異常查詢大幅增加該數字可能是有利的。例如,我可能想保留
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';