단일 PostgreSQL 쿼리가 여러 코어를 사용할 수 있습니까?


56

최신 버전의 PostgreSQL (2013 년 12 월 기준)에서 성능 향상을 위해 둘 이상의 코어간에 쿼리를 공유 할 수 있습니까? 아니면 더 빠른 코어를 얻어야합니까?

답변:


48

아니요, v9.6 이전의 PostgreSQL 버전에는 해당되지 않습니다. PostgreSQL FAQ : PostgreSQL은 CPU 리소스를 어떻게 사용합니까?를 참조하십시오 .

PostgreSQL 서버는 프로세스 기반 (스레드되지 않음)입니다. 각 데이터베이스 세션은 단일 PostgreSQL 운영 체제 (OS) 프로세스에 연결 됩니다. 여러 세션이 OS에 의해 사용 가능한 모든 CPU에 자동으로 분산됩니다. 또한 OS는 CPU를 사용하여 디스크 I / O를 처리하고 데이터베이스 이외의 다른 작업을 실행합니다. 클라이언트 응용 프로그램은 스레드를 사용할 수 있으며 각 스레드는 별도의 데이터베이스 프로세스에 연결됩니다.

버전 9.6 이후 부의 일부 쿼리의 여러 CPU 코어가 사용될 수 있도록, 별도의 OS 공정에 병렬로 실행할 수있다. 병렬 쿼리 는 버전 10 (max_parallel_workers_per_gather)에서 기본적으로 활성화되며 향후 릴리스에서 추가 병렬 처리가 예상됩니다.


37

PostgreSQL 9.6 이상에서는 Parallel-Query가 마침내 PostgreSQL에 오기 시작했습니다.

예를 들어, 병렬 스캔 / 병렬 조인 / 병렬 집계 와 같은 개념 은 이제 이미 구워졌으며 앞으로 더 많은 정보가 제공 될 것입니다.

정말 흥미로운 것은 어떤 경우에는 확인 하는 보고서 가 있다는 near-linear speed-up것인데, 이는 매우 인상적입니다!



3

아니요. 각 연결은 서버에서 별도의 프로세스를 생성합니다.

pljava와 같은 스레드 절차 언어를 사용하여 일부 병렬 처리를 "모방"할 수 있습니다. 여러 스레드를 시작하는 Java 프로 시저 (함수)를 작성하고 여러 작업자를 사용하여 출력 결과를 작성하십시오. 백엔드는 동기화되어 각 작업자가 출력을 비동기 적으로 업데이트 할 수 있습니다.

Java는 스레드 조정 / 협력을 잘 지원합니다.

예를 들어 CPU 집약적 인 작업이나 네트워크 길이 작업에 유용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.