2013-11-14 2 views
1

제 질문은 일반적이지만 내 문제를 설명하는 예제도 있습니다. 나는 Openjpa를 기반으로 한 persistence layer를 가진 webapp을 개발하였고 그것을 테스트하기 위해 두 개의 데이터베이스를 사용했다. 하나는 Postgres 8.1이고 다른 하나는 Postgres 9.2입니다. 그들에는 동일한 내용, 동일한 자료가있다! 웹 응용 프로그램을 모두 배포했지만 잘 작동했지만 PostgreSql 8.1을 사용할 때 매우 이상한 문제가있었습니다. SELECT * FROM MEDICINE_CASE 유형의 선택 쿼리는 Postgres 9.2에서 최대 10 초, Postgres에서 40-50 초 이상 걸립니다. 이것은 내 webapp에 많은 좋은 일을 낭비 할 수 있습니다. MEDICINE_CASE 테이블은 20 개의 열과 5000 개 이상의 항목이있는 거대한 테이블이며 다른 테이블과 7-8 개의 외래 키 관계가 있습니다. 왜이 문제가 발생하는지 그리고 Postgres 8.1에서 어떻게 해결할 수 있는지 알 수 있습니까?쿼리 실행 속도 PostgreSQL 8.1 vs PostgreSQL 9.2

+0

두 데이터베이스가 동일한 시스템에서 실행 중이거나 각 데이터베이스가있는 개별 시스템이 있고이 경우 두 시스템이 동일한 구성입니까? –

+1

또한 두 DB에서 설명을 실행하고 여기에 게시하십시오 :'EXPLAIN SELECT * FROM MEDICINE_CASE' –

+0

다른 컴퓨터에 두 개의 데이터베이스가 있습니다. 하지만 나는 hw 문제라고 생각하지 않는다. – andPat

답변

1

일반적으로 쿼리의 EXPLAIN ANALYZE를 수행하지만, 단순한 경우 SELECT * FROM tablename은 많이 표시하지 않습니다. 또한 8.1의 EXPLAIN에는 BUFFERS 옵션이 없습니다.

당신은 5000 개의 항목을 가진 거대한 테이블이라고 말하지만, 일반적으로 행 수 측면에서 오늘날의 표준에서는 매우 작다고 여겨집니다. 그러나 테이블 스캔을위한 40 초는 길고 많은 내용을 가지고 있음을 시사합니다.

테이블에 메가 바이트의 텍스트 또는 바이트 내용이있는 열과 같은 거대한 내용이 있거나 유지 관리 부족으로 인해 부풀어 오릅니다. 아니면 둘다.

8.1 데이터베이스 (pg_dump를 sql 파일/dropdb/createdb/reload SQL 파일로)를 덤프하고 다시로드 할 수 있다면 성능 차이가 실제로 버전 (의심스러운) 또는 부 풀림과 단편.

또한 어쨌든해야 할 일은 8.1에서 포기하고 대신 지원되는 버전을 사용하는 것입니다.