내 제품에 Postgres DB를 사용하고 있습니다. 매끄러운 3을 사용하여 일괄 삽입을 수행하는 동안 오류 메시지가 나타납니다.
org.postgresql.util.PSQLException : FATAL : 죄송합니다. 이미 클라이언트가 너무 많습니다.
내 일괄 삽입 작업은 수천 개 이상의 레코드가 될 것입니다. 내 postgres의 최대 연결은 100입니다.
최대 연결을 늘리는 방법은 무엇입니까?
답변
단지 증가시키는 max_connections
것은 나쁜 생각입니다. 당신은 증가시켜야 shared_buffers
하고 kernel.shmmax
뿐만 아니라.
고려 사항
max_connections
데이터베이스 서버에 대한 최대 동시 연결 수를 결정합니다. 기본값은 일반적으로 100 개의 연결입니다.
연결 수를 늘리기 전에 배포를 확장해야 할 수 있습니다. 그러나 그 전에 연결 제한을 늘려야하는지 여부를 고려해야합니다.
각 PostgreSQL 연결은 연결 또는이를 사용하는 클라이언트를 관리하기 위해 RAM을 사용합니다. 연결이 많을수록 데이터베이스를 실행하는 데 사용할 수있는 RAM이 더 많이 사용됩니다.
잘 작성된 앱은 일반적으로 많은 수의 연결이 필요하지 않습니다. 많은 수의 연결이 필요한 앱이있는 경우 연결을 풀링 할 수있는 pg_bouncer 와 같은 도구를 사용하는 것이 좋습니다. 각 연결이 RAM을 소비하므로 사용을 최소화해야합니다.
최대 연결을 늘리는 방법
1. 증가 max_connection
및shared_buffers
에 /var/lib/pgsql/{version_number}/data/postgresql.conf
변화
max_connections = 100
shared_buffers = 24MB
에
max_connections = 300
shared_buffers = 80MB
shared_buffers
구성 파라미터는 얼마나 판정 기억 되는 전용 에 사용하는 PostgreSQL 데이터를 캐싱 .
- 1GB 이상의 RAM이있는 시스템이있는 경우 shared_buffers의 적절한 시작 값은 시스템 메모리의 1/4입니다.
- 적은 양 (예 : 25 %)보다 더 잘 작동하기 위해 40 % 이상의 RAM을 사용하는 경우는 거의 없습니다.
- 시스템 또는 PostgreSQL 빌드가 32 비트 인 경우 shared_buffers를 2 ~ 2.5GB 이상으로 설정하는 것이 실용적이지 않을 수 있습니다.
- Windows에서는 shared_buffers 값이 크면 효과적이지 않으며 상대적으로 낮게 유지하고 대신 OS 캐시를 더 많이 사용하는 것이 더 나은 결과를 찾을 수 있습니다. Windows에서 유용한 범위는 64MB ~ 512MB 입니다.
2. kernel.shmmax 변경
당신은 할 커널 최대 세그먼트 크기를 증가 할 필요가 약간 큰
댄 shared_buffers
.
파일에서 /etc/sysctl.conf
아래와 같이 매개 변수를 설정합니다. postgresql
재부팅 할 때 적용 됩니다 (다음 줄은 커널을 최대로 만듭니다 96Mb
).
kernel.shmmax=100663296
참고 문헌
답변
위니의 훌륭한 대답에 덧붙여,
누군가 설정에서 postgresql.conf 파일 위치를 찾을 수없는 경우 언제든지 postgres 자체에 요청할 수 있습니다.
SHOW config_file;
나를 위해 max_connections를 변경하는 것만으로도 트릭을 만들었습니다.
답변
/ var / lib / pgsql / data 또는 / usr / local / pgsql / data /에있는 postgresql.conf 파일의 max_connections 변수를 변경합니다.