이 옵션에 대해 몇 가지 질문이 있습니다. 이 옵션은 기본적으로 app.yml에서 주석 처리되어 있으며, 정렬 성능을 향상시킬 수 있지만 연결당 메모리 사용량이 증가한다고 되어 있습니다. 이것이 실제로 무슨 의미인지 궁금합니다. 연결 수에 따라 달라지는 건가요? db_work_mem이란 무엇이며, db_shared_buffers나 UNICORN_WORKERS처럼 Discourse 설치 시 자동으로 설정되나요? 이 옵션을 활성화하는 것이 안전하다고 볼 수 있는지, 아니면 고급 설정에 해당하는지 알고 싶습니다.
현재 설정은 다음과 같습니다: #db_work_mem: "40MB"
서버 사양은 다음과 같습니다: Vultr High Frequency Compute 2 vCore, 4096 MB
제이, 감사합니다! 사실 저는 그냥 궁금해서 여쭤본 것입니다. 포럼의 성능을 더 좋게 만드는 방법을 찾고 있었는데, 만약 문제를 일으킬 수 있다면 주석 처리한 채로 두는 것이 더 나을 것 같습니다.
제가 이해한 대로라면, 활성화했을 때 튜닝이 올바르지 않거나 트래픽이 증가하면 메모리가 부족해질 가능성이 높다는 말씀이신가요?
work_mem (integer)
쿼리 작업(정렬 또는 해시 테이블 등)이 임시 디스크 파일로 데이터를 쓰기 시작하기 전에 사용할 수 있는 기본 최대 메모리 양을 설정합니다. 이 값에 단위가 지정되지 않으면 킬로바이트로 간주됩니다. 기본값은 4메가바이트(4MB)입니다. 복잡한 쿼리의 경우 여러 정렬 또는 해시 작업이 병렬로 실행될 수 있으며, 각 작업은 임시 파일로 데이터를 쓰기 시작하기 전에 이 값에서 지정된 만큼의 메모리를 사용할 수 있습니다. 또한, 여러 실행 중인 세션이 동시에 이러한 작업을 수행할 수도 있습니다. 따라서 사용되는 총 메모리는 work_mem 값의 여러 배가 될 수 있으므로, 값을 선택할 때 이 점을 염두에 두어야 합니다. 정렬 작업은 ORDER BY, DISTINCT 및 병합 조인(merge joins)에 사용됩니다. 해시 테이블은 해시 조인, 해시 기반 집계 및 IN 서브쿼리의 해시 기반 처리에 사용됩니다.
해시 기반 작업은 동등한 정렬 기반 작업보다 메모리 사용 가능량에 일반적으로 더 민감합니다. 해시 테이블에 사용할 수 있는 메모리는 work_mem에 hash_mem_multiplier를 곱하여 계산됩니다. 이를 통해 해시 기반 작업이 일반적인 work_mem 기본 양을 초과하는 메모리를 사용할 수 있습니다.
In the postgres.template.yml template the db_work_mem: "10MB" is default so it calculate with this formula I think. I think this 10MB is the max right now. Thanks Jay