2

aprox가있는 테이블이있는 시스템에서 작업하고 있습니다. 1,300 만 기록. 포스트 그레스에게는 큰 문제는 아니지만이 특정 테이블을 치를 때 심각한 성능 문제에 직면하고 있습니다.AWS의 Postgres 성능 필터 또는 집계 관련 문제

테이블에 aprox가 있습니다. 60 열 (나는 그것이 너무 많다는 것을 알고 있지만, 나의 의지를 넘어서서 그것을 바꿀 수는 없다).

하드웨어에 문제가 없습니다. AWS에서 실행 중입니다. 몇 가지 구성, 심지어 postgres에 대한 새로운 RDS를 테스트했습니다 :

       vCPU ECU  mem(gb) 

m1.xlarge  64 bits  4  8  15 

m2.xlarge  64 bits  2  6,5  17 

hs1.8xlarge  64 bits  16  35  117  SSD 

pgtune으로 조정 된 pg 설정. 그리고 우분투의 커널 sshmall과 shmmax도 설정하십시오.

일부 "분석 설명"쿼리 :

에서 SELECT COUNT (*) : 내가 자주 사용되는 컬럼에 BTREE 인덱스가

HashAggregate (cost=159341.37..159341.39 rows=2 width=516) (actual time=15965.740..15966.090 rows=329 loops=1) 
    -> Bitmap Heap Scan on core_eleitor (cost=1433.53..159188.03 rows=61338 width=516) (actual time=956.590..9021.457 rows=5886110 loops=1) 
    Recheck Cond: ((core_eleitor_city)::text = 'RIO DE JANEIRO'::text) 
    -> Bitmap Index Scan on core_eleitor_city (cost=0.00..1418.19 rows=61338 width=0) (actual time=827.473..827.473 rows=5886110 loops=1) 
     Index Cond: ((core_eleitor_city)::text = 'RIO DE JANEIRO'::text) 
Total runtime: 15977.460 ms 

:

$Aggregate (cost=350390.93..350390.94 rows=1 width=0) (actual time=24864.287..24864.288 rows=1 loops=1) 
    -> Index Only Scan using core_eleitor_sexo on core_eleitor (cost=0.00..319722.17 rows=12267505 width=0) (actual time=0.019..12805.292 rows=12267505 loops=1) 
    Heap Fetches: 9676 
Total runtime: 24864.325 ms 

것은에서 별개의 core_eleitor_city를 선택 필터 또는 집계.

그래서 주어진 테이블 디자인을 변경할 수 없습니다. 실적을 향상시키기 위해 할 수있는 일이 있습니까?

도움이 될 것입니다.

감사

답변

1

당신은 집계하고 ~ 12.3M와 ~ 아마 아직에 SAN에서 가져온 데이터와 내가 착각하고 있지 않다 경우, 여러 개의 물리적 서버에 걸쳐 수하는 VPS 클러스터에 5.9M 행 Postgres와는 다른 서버 세트.

Imho, a) 기본적으로 전체 데이터베이스 테이블을 방문하는 쿼리를 실행하지 않고 b) 가능하면 트리거를 사용하여 사전 카운트를 유지하는 것 외에 (AWS 어쨌든) AWS를 더 빨리 수행 할 수있는 방법은 거의 없습니다. 당신은 그렇게하기를 계속합니다. 여기

1

당신이 RDS의 성능 향상을위한 이동 : 여기 링크 언급

을 :

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html

아마존 RDS가 사용하는 MySQL의에 내장 된 복제 기능 DB 인스턴스의 특별한 유형을 만들 수 원본 DB 인스턴스에서 읽기 복제본이라고합니다. 원본 DB 인스턴스에 대한 업데이트가 읽기 복제본으로 복사됩니다. 응용 프로그램의 읽기 쿼리를 읽기 복제본으로 라우팅하여 원본 DB 인스턴스의로드를 줄일 수 있습니다. 읽기 복제본을 사용하면 단일 DB 인스턴스의 용량 제한을 초과하여 확장 성이 뛰어난 데이터베이스 작업 부하에 대해 탄력적으로 확장 할 수 있습니다.

+0

참고 : OP는 아직 RDS에 읽기 복제 기능이없는 Postgres를 지칭하고있었습니다. –

+0

@MalCurtis 고맙습니다 .. !!! –