PostgreSQL을 최대 64 코어로 확장 하시겠습니까?


10

Computer World 기사 에서 PostgreSQL은 64 개의 코어 제한까지 확장 할 수 있음을 지정합니다. 이는 64 코어 멀티 코어 프로세서 하나에 해당됩니까? 아니면 코어 수가 적은 다중 프로세서?

내가 묻는 이유는 PostgreSQL이 확장 할 수있는 프로세서의 양을 찾으려고 노력하기 때문이지만 물론 프로세서 유형에 국한 될 수 있습니다. 그러나, 나는 다른 데이터베이스에서 다른 통계를 찾아 봤는데 (예 : Microsoft SQL Server는 여기 가 최대 320 개의 논리 프로세서를 확장 할 수 있습니다 진술) 그들은 코어의 자신의 수를 지정하지 마십시오. 매우 모호한 통계입니까?

어떤 생각이라도 대단히 감사하겠습니다. 감사!


1
PostgreSQL은 8 개의 8 코어 CPU, 32 개의 2 코어 CPU 등 어떤 것이 든 상관하지 않습니다. 논리 프로세서에만 관심이 있습니다. 또한 64 개의 코어는 근사치이며 나머지 하드웨어에 따라 다릅니다. 7200rpm SATA 하드 드라이브에 1TB 데이터베이스에 4GB의 RAM 만 있으면 64 코어가 아무 소용이 없습니다. 코어 번호에는 기술적으로 제한이 없으며, 최근 테스트를 거쳐 최대 64 개까지 확장 가능한 것으로 입증되었습니다.
Craig Ringer

답변:


7

아닙니다. 매우 정확한 통계입니다. "논리 프로세서"는 핵심입니다. 그리고 핵심은 단지 물리적 프로세서에 어떻게 분산되어 있는지는 중요하지 않습니다.

그리고 지원되는 수보다 많은 코어를 가진 머신을 다루는 경우 PostgreSQL에는 문제가되지 않습니다. 각 연결은 본질적으로 단일 스레드 *이므로 코어 수에 관계없이 동시 연결의 효율성과 효율성을 제한 할 수 있습니다.

말할 것도없이, 더 복잡한 방법으로 물건을 묶지 않으려면 돈을 코어 수보다 더 빠른 코어에 넣어야합니다.

* 2017 업데이트 : 일부 쿼리 (또는 하위 쿼리)가 병렬로 실행될 수 있습니다 .


1
Needless to say this also means you should put your money in faster cores than quantity of cores unless you want to cluster things in a more complicated method.<-코어 수가 동시 클라이언트 수보다 많고 동시 클라이언트 수가 증가하지 않을 경우에만이 진술에 동의합니다. 성능은 각 Postgres를 백엔드에 사용할 수있는 코어가하는 것은 ... 매우 중요합니다
voretaq7

@ voretaq7 대부분 동의하지만 TPS가 높은 CPU는 주어진 시간에 더 많은 트랜잭션을 처리 할 수 ​​있으므로 더 많은 클라이언트를 처리 할 수 ​​있습니다. 로드 유형과 예산에 따라 적절한 지점이 있습니다.
Oli

1
논리적 프로세스는 현재 기술을 갖춘 가장 작은 논리적 실행 단위이며 핵심이 아니며 스레드입니다.
dyasny

2
@ voretaq7 : 연결 풀링 메커니즘을 통해 postgresql에 연결하는 것은 드문 일이 아닙니다. 그중에서도 postgresql에 연결하는 것이 상대적으로 비싸기 때문에이 작업이 수행됩니다. 풀링은 데이터베이스에 대한 동시 연결 수를 크게 줄일 수 있습니다. 따라서 코어 수보다 빠른 CPU를 선호합니다. 그러나 항상 그렇듯이 : 그것은 많은 요인들에 달려 있습니다.
m.sr

2
@ m.sr 동의-연결 풀링 메커니즘은 매우 일반적입니다. 이 중 "가장"은 "Postgres에 대한 여러 연결을 시작하고 그 사이에 균형을 맞 춥니 다 (사내 앱 중 하나는 각 Apache 프로세스에 Postgres에 대한 자체 연결을 제공하여 합리적인 백엔드를 사용하는 유스 케이스에 대한 매우 편리한 맵핑입니다) 대 사용자 비율). IMHO 연결 풀링이 백엔드를 생성하지 않고 쿼리를 대기열에 올리면 유리한 점이 아니라 데이터베이스 관리자 에 대해 더 많은 장단점이 있습니다 . 그래서 물었다!
voretaq7'12

12

Postgres는 설치하려는 프로세서 수만큼 확장 할 수 있으며 OS는 효과적으로 처리 / 관리 할 수 ​​있습니다. 128 코어 시스템 (또는 128 개의 물리적 프로세서가있는 시스템)에 Postgres를 설치할 수 있으며 제대로 작동합니다. 이 는 OS 스케줄러가 많은 코어를 처리 할 수 있는지 더 나은 64 코어 시스템보다 작동합니다.

Postgres는 최대 64 코어까지 선형으로 확장되는 것으로 나타났습니다 (주의 사항 : 우리는 특정 구성 (디스크, RAM, OS 등)에서 읽기 성능에 대해 이야기하고 있습니다 -Robert Haas는 멋진 그래프가있는 블로그 기사를 가지고 있습니다 아래를 재현했습니다.

여기에 이미지 설명을 입력하십시오

이 그래프에서 중요한 것은 무엇입니까?

클라이언트 수가 코어 수 보다 작거나 같으면 관계가 선형 (또는 거의 동일) 한 다음 클라이언트 연결이 많을수록 성능 이 대략적으로 로그 선형으로 감소 하기 시작 합니다. 백엔드가 CPU와 싸우기 시작하기 때문에 Postgres 백엔드를 실행하기 위해 코어를 수행하십시오 (부하 평균이 1.0 이상 등).

최대 64 개의 코어에 대해서만 시연 되었지만 프로세스가 더 이상없는 다른 하위 시스템 (디스크, 메모리, 네트워크)의 한계까지 코어 (및 클라이언트)를 계속 추가하고 성능을 계속 향상시킬 수 있음을 일반화 할 수 있습니다. CPU 경합 문제가 있지만 대신 다른 것을 기다리고 있습니다.

( 또한 Haas는 일반적으로 확장성에 대한 훌륭한 참조 자료가있는 32 코어에 대한 선형 확장 성을 입증하는 또 다른 기사 를 가지고 있습니다.


2
덧붙여서,이 선형 확장 성의 이유는 Oli의 답변 에 언급되어 있습니다 . Postgres는 각 클라이언트 연결에 대해 별도의 백엔드 프로세스를 사용합니다. 결과적으로 하나의 연결 만 사용하는 경우 여러 코어에 많은 이점이 없을 것입니다. 여러 코어를 활용하려면 병렬 요청이 필요합니다.
voretaq7

2

다른 사람들은 논리 프로세서가 일반적으로 CPU 코어를 언급한다고 밝혔지만 코어가 CPU에 어떻게 퍼져 있는지는 중요하지 않다는 진술에 대해 언급하고 싶습니다.

코어간에 공유되거나 단일 또는 하위 그룹의 코어 전용 캐시를 CPU 다이에 가질 수 있습니다. 예를 들어 하나의 공통 구성은 전용 L1 캐시와 공유 L2 캐시입니다. 이 경우 단일 듀얼 코어 CPU의 확장 성은 두 개의 단일 코어 CPU와 다를 수 있습니다.

이러한 확장 성은 NUMA 머신이 NUMA 이외의 다른 동작을 나타내는 메인 메모리에 계속 영향을 미칩니다.

OP가 확장성에 대해 논의하고 있기 때문에 이것 만 지적합니다. 그 대답은 일반적으로 "프로그램 X는 Y CPU 코어를 사용할 수 있습니다"보다 더 미묘한 차이가 있습니다.


1

이 경우 코어 수가 적은 여러 프로세서를 의미합니다. 일부 대화는 미래를 보장합니다. 일부는 마케팅이 가능합니다.

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