Greenplum 연결 풀 실습

4827 단어

라벨


PostgreSQL, Greenplum, pgbouncer, pgpool-II, 연결 풀

배경.


연결 탱크는 데이터베이스 응용에서 매우 중요한 구성 요소이다.
빈 연결은 아무것도 하지 않지만 연결마다 자신의relcache 캐시 공간이 있기 때문에 방문한 대상은 일정한 캐시 공간을 차지한다(방문한 대상이 많을수록 메모리가 많을수).따라서 연결이 비어 있어도 사실상 SOCKET와 일정한 메모리 공간을 차지한다.
어떤 업무장의 연결 문제(relcache의 강점 문제):
"PostgreSQL relcache가 긴 연결 응용 프로그램에서 메모리가""구덩이""를 차지합니다."
Greenplum은 데이터 창고입니다. 보통 데이터 창고는 대량의 섹션 테이블, 임시 테이블을 사용합니다. 보통 테이블도 많을 수 있습니다.그리고 방문한 테이블 (구역 포함) 도 비교적 많을 수 있습니다.따라서 그린플러스에서 세션 백엔드 프로세스가 차지하는 relcache 메모리가 더 많습니다.
그러면 그린플럼 사용자에게 긴 연결(그리고 대량의 빈 연결)은 주의해야 한다.
또 다른 연결 탱크를 사용하는 이유는 연결이 많을 때 OS의 세션 추적표를 가득 채워서 SQL 오류가 발생할 가능성이 높다(Greenplum Error: "Interconnect Error writing an Outgoing Packet: Operation not Permitted"):
'넷필터 conntrack table을 쉽게 터뜨리는 그린플럼 SQL'
연결 탱크(사무급 연결 탱크)를 사용하는 것은 매우 필요하다.

pgbouncer 연결 탱크 +Greenplum의 몇 가지 배치 모드


Connection Pooling


연결 탱크는 클라이언트와 데이터베이스 사이, 하나의 연결 탱크, 여러 개의 클라이언트 연결에 배치된다.
이런 모드에서는 pg 를 실현할 수 없습니다hba.conf는 클라이언트를 식별하고 ACL 제어를 합니다.데이터베이스에서 보이는 연결은 이 pgbouncer에서 온 것이고 pgbouncer는 클라이언트와 함께 있지 않기 때문이다.그래서 pgbouncer에서만 ACL을 설정할 수 있습니다.

Local Pooling


연결 탱크는 클라이언트와 함께 배치되고 모든 클라이언트 서버는 pgbouncer를 배치합니다.

Local Pooling with extra layer of PgBouncer


다중 모드, 클라이언트도 pgbouncer가 있고 데이터베이스와 클라이언트 사이에 집중된 pgbouncer가 있다.

구성 예


pgbouncer 연결 복원 모드


1. 세션 모드.연결을 주동적으로 복용하지 않습니다. 연결을 차지하는 세션이 끝난 후에만 이 연결을 다른 새로운 세션에 복용할 수 있습니다.짧은 연결 업무에 적합하다.
2. 사무 모델.업무가 끝난 후, 연결은 다른 세션에 다시 사용될 수 있습니다.긴 연결 업무에 적합합니다.하지만 귀속 변수는 지원되지 않습니다.
3. 문장 모드.문장 모드의 복용이 가장 느슨하고 문장이 끝나면 연결이 다른 세션에 복용될 수 있다.긴 연결 업무에 적합하며, 업무가 지원되지 않으며, 귀속 변수가 지원되지 않습니다.

연결 상태 재설정


재사용이 필요한 연결의 경우 세션 상태를 재설정해야 합니다.
예컨대
postgres=# discard all;  
DISCARD ALL  
  
postgres=# RESET all;  
RESET  

참고 자료


"PostgreSQL relcache가 긴 연결 응용 프로그램에서 메모리가""구덩이""를 차지합니다."
https://www.linkedin.com/pulse/scaling-greenplum-pgbouncer-sandeep-katta-/?articleId=6128769027482402816
https://pgbouncer.github.io/
http://pgpool.net/mediawiki/index.php/Main_Page

좋은 웹페이지 즐겨찾기