2014-04-04 2 views
1

저는 쿼리 최적화를 연구 중이며 각 종류의 최적화가 쿼리에 얼마나 도움이되는지 알고 싶습니다. 지난 번에 나는 answer을 가졌지 만, 실험에서 링크의 모든 최적화가 O (n^1.8) 시간 공약을 사용하지 않도록 설정하면 모두 O (n^0.5)가 가능합니다. 그다지 큰 차이는 없지만, 그것들을 모두 비활성화 시키면, 여전히 다른 최적화가 있습니까? 매번 한 번만 주요 최적화를 실제로 수행 할 수 있습니까?PostgreSQL의 모든 최적화를 비활성화하는 방법

+0

질문에 함축적으로 말하면 모든 쿼리를 실행하는 데 "기본"방법이 있다는 개념이며, 무언가를하지 않으면 기본 방법으로 돌아갈 수 있습니다. 나는 그것이 플래너가 작동하는 방식이라고 생각하지 않습니다. 또한, n^0.5와 n^1.8 사이의 차이는 엄청날 수 있습니다. – jjanes

답변

2

수 없습니다.

PostgreSQL의 쿼리 플래너에는 "최적화 해제"플래그가 없습니다.

추가하는 것은 흥미롭지 만 회귀 테스트를 훨씬 더 복잡하게 만들고 매우 제한된 유틸리티로 만들 것입니다.

원하는대로하려면 각 테스트에 대해 PostgreSQL을 쿼리 플래너 코드를 수정하고 다시 컴파일하고 다시 설치하려고합니다. 또는 사용자 정의 GUC (시스템 변수, 예 : enable_seqscan)를 추가하여 특정 최적화를 설정하거나 해제 할 수 있도록 해킹하십시오.

나는 그러한 패치가 PostgreSQL에 받아 들여지지 않을까 의심 스럽지만, 폐기 용으로 사용하는 것이 가치가 있습니다.

유일한 문제는 PostgreSQL이 "최적화"와 "쿼리를 실행하기 위해 수행하는 작업"을 강력히 구분하지 않는다는 것입니다. 때로는 플래너 코드 의 일부가일 경우 올바르게 작동하려면 특정 최적화가 적용된이 필요합니다.

+0

고마워, 내가 최적화 프로그램의 소스 코드를 수정해야 할 것 같아요. 그러나 그것은 다소 복잡해 보인다. postgresql optimizer의 세부 아키텍처에 대해 일부 문서 나 책을 제안 해 주시겠습니까? 나는 하나를 찾지 못했습니다 ... – user3419945

+0

postgresql 사이트의 개발자 섹션과 개발자 postgresql wiki 항목을보십시오. 거기에 몇 가지 리소스가 있습니다. Pg 문서에는 내부 정보도 있습니다. 가장 좋은 리소스는 소스 코드의 자체 주석입니다. 예, 복잡합니다. –

관련 문제