문제

FreeBSD PostgreSQL 백엔드로 웹 애플리케이션을 설정하고 있습니다.데이터베이스 성능 최적화 도구/기술을 찾고 있습니다.

도움이 되었습니까?

해결책

피그푸인 나에게는 꽤 잘 작동합니다.그리고 다음이 있는 것 같습니다. FreeBSD 포트 그것을 위해.

다른 팁

데이터베이스 최적화는 일반적으로 두 가지의 조합입니다.

  1. 데이터베이스에 대한 쿼리 수를 줄입니다.
  2. 쿼리에 응답하기 위해 확인해야 하는 데이터의 양을 줄입니다.

쿼리 양을 줄이는 것은 일반적으로 비휘발성이거나 덜 중요한 데이터(예:"어떤 사용자가 온라인 상태인지" 또는 "이 사용자의 최신 게시물은 무엇입니까?") 애플리케이션 내부(가능한 경우) 또는 외부(보다 효율적인) 데이터 저장소(memcached, redis 등)에 있습니다.쓰기가 매우 많은 정보가 있는 경우(예:히트 카운터) 필요하지 않습니다. - 의미론적으로 Postgres 데이터베이스에서 보다 효율적인 데이터 저장소로 이동하는 것에 대해 생각할 수도 있습니다.

쿼리 런타임을 최적화하는 것은 더 까다롭습니다. 특수 인덱스 (또는 인덱스를 먼저), 데이터 모델을 변경(비정규화)하거나 데이터베이스 작업과 관련하여 애플리케이션이 취하는 기본 접근 방식을 변경합니다.예를 들어 Postgres 방식으로 페이지 매김 수행 이야기하다 마르쿠스 위난드 데이터베이스 효율성을 높이기 위해 페이지 매김 개념을 다시 생각하는 방법

느린 방법으로 쿼리 측정

그러나 먼저 살펴봐야 할 쿼리를 이해하려면 해당 쿼리가 실행되는 빈도와 평균 실행 시간을 알아야 합니다.

이에 대한 한 가지 접근 방식은 런타임을 포함하여 모든(또는 "느린") 쿼리를 기록한 다음 쿼리 로그를 구문 분석하는 것입니다.이를 위한 좋은 도구는 다음과 같습니다. pgfouine 이 토론의 앞부분에서 이미 언급한 이후 다음으로 대체되었습니다. pgbadger 보다 친숙한 언어로 작성되어 훨씬 빠르고 적극적으로 유지 관리됩니다.

둘 다 pgfouine 그리고 pgbadger 쿼리 로깅을 활성화해야 한다는 사실로 인해 데이터베이스에 눈에 띄는 성능 저하가 발생하거나 도구를 사용하여 로그를 구문 분석하는 데 상당한 시간이 걸릴 수 있고 디스크 공간 문제가 발생할 수 있다는 사실로 인해 어려움을 겪습니다. 데이터베이스에 무슨 일이 일어나고 있는지에 대한 최신 통찰력을 제공합니다.

확장 기능으로 속도 높이기

이러한 단점을 해결하기 위해 이제 데이터베이스에서 직접 쿼리 성능을 추적하는 두 가지 확장이 있습니다. pg_stat_statements (버전 9.2 이상에서만 유용함) pg_stat_plans.두 확장 모두 동일한 기본 기능을 제공합니다. 즉, 지정된 "정규화된 쿼리"(쿼리 문자열에서 모든 표현식 리터럴을 뺀 값)가 실행된 빈도와 총 소요 시간을 추적합니다.쿼리가 실제로 실행되는 동안 이 작업이 수행된다는 사실로 인해 매우 효율적인 방식으로 수행되므로 측정 가능한 오버헤드는 합성 벤치마크에서 5% 미만이었습니다.

데이터 이해하기

쿼리 목록 자체는 정보 관점에서 볼 때 매우 "건조"합니다.이 사실을 해결하고 다음과 같은 데이터를 더 잘 표현하기 위한 세 번째 확장에 대한 작업이 있었습니다. pg_statsinfo (와 함께 pg_stats_reporter) 그러나 이를 시작하고 실행하는 것은 약간의 노력이 필요합니다.

이 문제에 대한 보다 편리한 솔루션을 제공하기 위해 저는 다음에 초점을 맞춘 상업 프로젝트 작업을 시작했습니다. pg_stat_statements 그리고 pg_stat_plans 데이터베이스에서 가져온 다른 많은 데이터를 통해 수집된 정보를 보강합니다.그것은 ~라고 불린다 pganalyze 그리고 당신은 그것을 찾을 수 있습니다 https://pganalyze.com/.

Postgres 모니터링 영역의 흥미로운 도구와 프로젝트에 대한 간략한 개요를 제공하기 위해 나는 또한 다음에서 목록을 작성하기 시작했습니다. 포스트그레스 위키 정기적으로 업데이트됩니다.

나는 pgtop을 조금 사용했습니다.꽤 조잡하지만 적어도 각 프로세스 ID에 대해 어떤 쿼리가 실행되고 있는지 확인할 수 있습니다.

pgfouine을 사용해봤는데 제 기억으로는 오프라인 도구인 것 같아요.

또한 psql.log 파일을 추적하고 문제 쿼리를 볼 수 있는 수준으로 로깅 기준을 설정했습니다.

#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements
                                        # and their durations, > 0 logs only
                                        # statements running at least this time.

또한 EMS Postgres Manager를 사용하여 일반 관리 작업을 수행합니다.아무런 도움이 되지 않지만 대부분의 작업이 더 쉬워지고 스키마 검토 및 설정이 더 간단해집니다.GUI를 사용할 때 불일치(예: 누락된 색인, 필드 기준 등)를 발견하는 것이 훨씬 더 쉽다는 것을 알았습니다.Mac에서 VMWare를 사용하여 사용하려는 두 프로그램 중 하나일 뿐입니다.

Munin은 시간이 지남에 따라 데이터베이스가 어떻게 발전하고 성능을 발휘하는지에 대한 추세를 파악하는 데 매우 간단하면서도 효과적입니다.Munin의 표준 키트에서는 무엇보다도 데이터베이스 크기, 잠금 수, 연결 수, 순차 스캔, 트랜잭션 로그 크기 및 장기 실행 쿼리를 모니터링할 수 있습니다.

설정 및 시작이 쉽고 필요한 경우 자신만의 플러그인을 매우 쉽게 작성할 수 있습니다.

Munin과 함께 제공되는 최신 postgresql 플러그인을 여기에서 확인하세요:

http://munin-monitoring.org/browser/branches/1.4-stable/plugins/node.d/

가장 먼저 해야 할 일은 "explain"을 사용하여 psql에서 모든 쿼리를 시도하고 인덱스를 추가하거나 쿼리를 다시 작성하여 인덱스 스캔으로 변환할 수 있는 순차 스캔이 있는지 확인하는 것입니다.

그 외에도 나는 당신만큼 이 질문에 대한 답변에 관심이 있습니다.

Lightning Admin을 확인해 보세요. 로그 문을 캡처하기 위한 GUI가 있지만 완벽하지는 않지만 대부분의 요구 사항에 적합하게 작동합니다. http://www.amsoftwaredesign.com

DBTuna http://www.dbtuna.com/postgresql_monitor.php 최근 PostgreSQL 모니터링 지원을 시작했습니다.우리는 이를 MySQL 모니터링에 광범위하게 사용하므로 Postgres에도 동일한 기능을 제공한다면 귀하에게도 적합할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top