2011-03-24 5 views
1

좋아요, 질문이 다소 모호하지만 감사합니다. 하루가 지나면 아무 도움이 없어 도움이 될 것이며 기꺼이 도와 드리겠습니다. 뭐든지 해봐.PSQL = 빠름, 원격 SQL = v.slow

문제는 우리가 특정 테이블에 10-1500 만 행을 가진 PostgreSQL 데이터베이스를 가지고 있다는 것입니다.

테이블의 DateTime 필드를 기반으로 모든 열에 대해 select를 수행합니다. 조인이 없으며 where 절을 사용하는 표준 선택입니다 (시간> = x 및 시간 < = y). 필드에 인덱스도 있습니다 ...

로컬 머신에서 psql을 사용하여 sql을 수행하면 약 15-20 초 내에 실행되고 0.5 백만 개의 행이 반환되며 그 중 하나는 행당 많은 양의 데이터를 보유하는 텍스트 필드 (프로그램 스택 추적). 동일한 SQL을 사용하여 Windows에서 Npgsql 또는 pgadmin III를 실행하면 약 2 분이 소요됩니다.

이것은 네트워크 문제라고 생각하게 만듭니다. 나는 쿼리가 실행 중이고 엄청난 양의 메모리 나 CPU를 사용하지 않고 있으며 네트워크 속도가 무시할 수있을 때 머신을 체크했다.

메모리 설정에 대한 권장 사항은 Postgres 사이트에도 나와 있습니다. shmmax와 shmall 업데이트하기.

우분투 10.04, PSQL 8.4, 4GB RAM, 2.8GHz 쿼드 제온 (가상이지만 전용 리소스)입니다. 그 기계는 윈도우 카운터 파트 (2008 R2, SS2008)도 가지고 있지만 꺼져 있습니다. 쿼리는 동일한 스키마와 데이터를 가진 SS를 사용하여 약 10-15 초 내에 반환됩니다.이 비교는 직접 비교가 아니지만 디스크 성능 문제가 아니라는 것을 보여주고 싶었습니다.

그래서 질문은 ... 어떤 제안입니까? 변경해야하는 네트워크 설정이 있습니까? 내가 놓친 것은 뭐니? 나는

Index Scan using "IDX_column1" on "table1" (cost=0.00..45416.20 rows=475130 width=148) (actual time=0.025..170.812 rows=482266 loops=1) 
Index Cond: (("column1" >= '2011-03-14 00:00:00'::timestamp without time zone) AND ("column1" <= '2011-03-14 23:59:59'::timestamp without time zone)) 
Total runtime: 196.898 ms 
+0

psql을 사용하여 원격 Windows machne에서 동일한 명령을 실행하고 NPGSQL 또는 PGADMIN 또는 네트워크인지 여부를 알려주는 내용을 확인하십시오. 내 추측에 따르면 그것은 총 시간에 약간의 추가 시간을 추가하는 네트워크입니다. 또한 실제로 필요한 컬럼 만 다시 가져 오십시오. 모두가 실제로 필요하지 않는 한 – Kuberchaun

+0

또한 원격 시스템에서 psql을 실행할 때 명령 창이 아닌 파일에 출력을 tee/pipe합니다. 화면에 쓰기가 느려지고 결과가 왜곡됩니다. – AngerClown

+0

다음을 실행했습니다 ... – Martin

답변

0

psql의 1로 cursor_tuple_fraction 설정을 시도하고 결과를 변경하는 경우 참조 ... 데이터베이스에 대한 너무 많은 정보를 제공하지만, 여기가이 난독 것 ANALYZE EXPLAIN입니다 수 없습니다. 그렇다면 옵티마이 저는 전체로 많이 사용하는 것보다 상위 10 % 정도의 결과 만 얻는 것을 기준으로 더 나은 계획을 선택하는 것일 수 있습니다. Istr psql은 커서를 사용하여 "firehose"executequery 메소드보다는 조각으로 결과를 가져옵니다.

이 경우 직접 솔루션을 가리 키지는 않지만 플래너 설정을 조정해야하며 적어도 psql에서 동작을 재현 할 수 있다면 차이점을보다 쉽게 ​​볼 수 있습니다 테스트 변경.

+0

좋아, 내가 해냈어 그리고 지금 psql은 pgadmin/npgsql만큼 느리다 ... 저에게 플래너 설정을 조정하는 방법에 대한 아이디어를 줄 수있는 사이트가 있습니까? – Martin

+0

http://www.revsys.com/writings/postgresql-performance.html 시작하는 것이 좋습니다. 내 경험상, seq_page_cost를 기준으로 random_page_cost를 조정하면 시작할 위치이며 effective_cache_size; 또한 work_mem 설정이 인 - 메모리 종류의 "적절한"데이터 양을 수행 할만큼 충분히 큰지 점검하십시오. – araqnid

+0

답을 표시하는 것만으로도 그 밑바탕에 완전히 도달하지는 못했지만 여기 값을 가지고 놀면 도움이되었습니다. – Martin

관련 문제