2016-09-22 1 views
6

우리는 우리의 응용 프로그램에서 Oracle 데이터베이스 대신 PostgreSQL DB를 평가하려고합니다. 우리는 128GB의 메모리, 32 개의 CPU 코어 및 SSD 스토리지가있는 Linux 컴퓨터에 설치된 PostgreSQL 9.5를 사용합니다. 커넥션 풀과 분산 트랜잭션은 JBoss 7 어플리케이션 서버에 의해 관리되며, SQL 질의는 Hibernate 4에 의해 생성/실행됩니다. 대부분의 테이블에는 수십만 개의 행이 있으며 그 중 하나에는 수백만 개의 행이 있습니다. 총 약 3,000 개의 데이터베이스 연결 (응용 프로그램 서버에 의해 풀링 됨)이 활성화되어 동시에 사용됩니다. 우리는 몇 가지 쿼리를 수정하고, 느린 쿼리를 위해 인덱스를 만들었으며, 문서를 기반으로 DB 및 OS 설정을 조정했습니다. 그러나 처리량은 몇 배 느려 결국 DB 응답 시간이 10-20 배 증가합니다.수천 개의 연결 및 분산 트랜잭션에 대한 PostgreSQL DB 성능 문제

나는 약간의 인터넷 검색을 해봤 내가 PostgreSQL의 DB를 동일한 방식으로 사용하여 다른 사람 (AB)에 대한 정보를 찾을 수 없습니다 :이 높은 번호를 사용하여 활성 데이터베이스 연결

  • 수천을 사용

    • 을 분산 트랜잭션 (PREPARED 거래)는
    • 는 더 높은로드를 처리 문제가없는 한 테이블

    오라클의 행 수십억을 저장. 나는 등을 경험, 제안, 링크,

    감사

  • +2

    Zalando는 Postgres를 사용하며 많은 클라이언트를 동시에 지원합니다. 그래서 엔진이 성가신 것처럼 나는 그것을 말할 수 있습니다 :) 큰 테이블을 다루는 것은 파티셔닝이 편리합니다. 이 질문은 꽤 광범위합니다. 나는 당신이 예상 한 답변을 얻지 못할 것이라고 생각합니다. –

    +0

    의견을 보내 주셔서 감사합니다. GIT repo (https://github.com/zalando/patroni/search?utf8=%E2%9C%93&q=prepared)를 기반으로하여 분산 트랜잭션을 사용하지 않습니다. max_prepared_transactions = 0 기본값 max_connections에 대한 100입니다. 나는 생산 가치가 다를 가능성이 높습니다 이해합니다. –

    +1

    고유 한 트랜잭션 관리자가 있습니까? 분산 트랜잭션을 사용하여 클러스터의 다른 데이터베이스에서 전역 트랜잭션을 허용합니까? 대신 보상금을 고려 했습니까? –

    답변

    0

    해결책은 Linux 커널을 업그레이드하고 Java 연결 풀의 DB 연결 수를 3000에서 300으로 줄이는 것입니다.이 변경 후 우리는 Oracle DB에서와 동일한 트래픽을 처리 할 수있었습니다. 사고로

    로버트 하스 (VP, 수석 건축가, 엔터프라이즈 DB, PostgreSQL의 주요 기여자 및 커미터 @ 데이터베이스 서버)에 의해 작성된 게시물 Did I Say 32 Cores? How about 64? 댓글 섹션에서 문제 해결로 이어질 정보의 귀중한 조각을 발견했다 :

    아니요, 64 코어 서버에서 좋은 성능을 얻으려면 PostgreSQL> = 9.2 Linux> = 3.2가 필요합니다. 변경 사항의 대부분은 실제로 PostgreSQL 측면에 있지만 Linux 커널의 lseek scaling 항목 역시 중요했습니다.

    -1

    Approprite 설정이 연결의 많은 수를 처리하기 위해 postgresql.conf 파일 제공되어야한다 공유를 부탁드립니다. 또한 복제 및로드 밸런싱을 위해 pgpool2에 의해 프런트 엔드 될 수 있습니다. 우리는 클러스터 된 env에서 Postgres를 사용하고 있으며 잘 작동합니다.

    +0

    수천 개의 동시 활성 연결이 있고 분산 트랜잭션을 사용하며 수백억 개의 레코드가 있습니까? –

    +0

    예, 여러 서버, 여러 응용 프로그램, 동시에 많은 수의 사용자가 연결되어 있습니다. – Sri

    +0

    '많은 수의 사용자'를 정의 할 수 있습니까? 수백 또는 수천 개의 동시 활성 쿼리입니까? –

    관련 문제