Greenplum 연결 풀 실습
라벨
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.