SQL 튜닝 과정(StartUP Tuning For PostgreSQL)까지 공부가 필요하신 분만 수행하시면 됩니다.
SELECT * FROM pg_available_extensions; -- 설치 가능한 확장팩
SELECT * FROM pg_extension; -- 설치된 확장팩
PG는 힌트를 사용하기 위해서는 확장팩인 pg_hint_plan을 설치해야 합니다.
조금 복잡할 수 있습니다. 개인적으로 이렇게 복잡해서.. 나중에 관리가 될까 싶습니다.
아래 경로에서 pg_hint_plan rpm 파일을 다운로드 합니다.
여기서는 pg_hint_plan16-1.6.0-1.el8.x86_64.rpm 파일을 다운로드했습니다.

다운로드 받은 파일을, C 드라이드에 mypg_upload 이란 폴더에 카피해놓습니다.
다운로드 받은 파일을 PG 컨테이너에 올려야 하는데, 파일 단위가 아닌 폴더 단위로만 올릴 수 있습니다. 그러므로 폴더 하나에 다운로드한 rpm 파일 하나만 놓도록 합니다.

rpm 파일을 컨테이너에 업로드합니다.
Docker Desktop을 사용해 rpm 파일을 업로드합니다.



rpm 파일을 설치합니다.
Docker Desktop에서 컨테이너에 진입해 Exec 메뉴를 클릭합니다.
여기서 Linux Shell 명령어를 실행할 수 있습니다.

아래 명령어들을 차례대로 하나씩 입력합니다.
apt update
apt install alien
alien -d /tmp/mypg_upload/pg_hint_plan16-1.6.0-1.el8.x86_64.rpm
dpkg -i pg-hint-plan16_1.6.0-2_amd64.deb
계속해서 EXEC창에서 다음 명령어로 pg_hint_plan이 컨테이너에 잘 설치되어 있는지 확인합니다.
ls /usr/pgsql-16/lib/

설치된 파일을 정상적인 경로로 카피해서 옮깁니다.
cp -a /usr/pgsql-16/share/extension/* /usr/share/postgresql/16/extension/

pg_hint_plan을 PG의 conf 파일에 등록합니다.
컨테이너의 Files 메뉴를 선택
postgresql.conf 를 마우스 우클릭 후 Edit File을 선택합니다.
아래 부분에 파일의 내용이 열립니다. shared_preload_libraries 부분의 주석을 제거하고 다음과 같이 수정합니다.
기본 설치된 경로가 문제인지, 경로 없이 pg_hint_plan을 바로 설정하면 제대로 작동하지 않습니다.
shared_preload_libraries = 'pg_stat_statements, /usr/pgsql-16/lib/pg_hint_plan' # (change requires restart)
오른쪽 위에 저장 버튼을 누릅니다.
컨테이너를 종료했다. 다시 시작합니다.


추가로, postgresql.conf (var/lib/postgresql/data) 에서 병렬 처리를 제한합니다.
max_parallel_workers_per_gather 부분을 찾아서 주석을 제거하고 값을 0으로 설정합니다.
저장합니다.
종료 후 다시 시작합니다.
max_parallel_workers_per_gather = 0 # limited by max_parallel_workers
