PostgreSQL 8.3 : 쿼리 당 리소스 소비 제한


12

내가 사용하고 PostgreSQL의 8.3 + PostGIS와 1.3 에 지리 공간 데이터를 저장하기 위해 우분투 8.04 하디 .

이 특정 버전의 PostGIS에는 buffer()매우 복잡한 세그먼트를 계산할 때 버그 가 발생하여 전체 시스템이 멈출 때까지 쿼리가 더 많은 메모리를 차지합니다.

다음과 같은 PostgreSQL 메커니즘을 찾고 있습니다.

  • 특정 쿼리에서 사용하는 메모리 소비 (및 기타 리소스)를 제한하십시오.
  • 실행 시간이 특정 임계 값을 초과하는 쿼리를 자동으로 중지합니다.

어떤 아이디어?


물린 버그가있는 버전을 계속 사용하는 이유는 무엇입니까? 수정되었고 문제가 해결 된 버전을 사용하십시오.
Frank Heikens

사실, 때로는 코드에 버그가 있거나 너무 오래 걸리는 쿼리가 있습니다. 로그 오류 메시지와 함께 죽기를 원합니다.
Adam Matan 2019

답변:


9

메모리 소비를 제한하기 위해 기본 구성 매개 변수는 work_mem입니다. 이것은 쿼리가 아닌 작업마다 적용되므로 N 개의 메모리를 소비하려는 경우 단순히 N으로 설정할 수는 없지만 원하는 결과를 얻으려면 비트를 조정하고 약간 조정해야합니다.

그러나 서버 코드 또는 확장에서 버그 및 기타 메모리 누수가 발생하는 경우에는 도움이되지 않습니다. 에 의해 제어되는 프로세스 별 리소스 제한으로이를 제어 할 수 ulimit있습니다. 그러나 한계에 도달하고 메모리 할당이 실패하면 어떻게 하시겠습니까? 아마 너무 잘 작동하지 않을 것입니다. 이러한 버그를 수정하거나 다른 버전을 사용하십시오.

실행 시간이 임계 값을 초과 한 중지 쿼리는 'statement_timeout'매개 변수를 사용합니다.

SET statement_timeout TO '10min';

큰. 내가 찾던 것.
Adam Matan 2019

2

Postgres Wiki를 살펴보십시오 .

PostgreSQL에는 특정 사용자, 쿼리 또는 데이터베이스가 사용하는 리소스를 제한하거나 이에 따라 우선 순위를 설정하여 한 사용자 / 쿼리 / 데이터베이스가 다른 사용자보다 더 많은 리소스를 가져 오는 기능이 없습니다. 제한된 우선 순위 지정이 가능하도록 운영 체제 기능을 사용해야합니다.

사용자 또는 데이터베이스별로 성능 설정을 조정할 수 있지만 특정 쿼리를 중단 할시기는 없습니다.


+1 전체 클러스터가 사용할 수있는 최대 메모리 양을 설정하는 것은 어떻습니까?
Adam Matan 2019
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.