이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다
현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.
Martin Utesch자동 제어 연구소
광업 기술 대학
FREIBERG, 독일
1997 년 2 월 10 일
1.) 복잡한 최적화 문제로서의 쿼리 처리
=====================================================
모든 관계 사업자 중에서 처리하기 가장 어려운 사람과
최적화는 조인입니다. 쿼리에 답변하기위한 대체 계획의 수
포함 된 조인 수에 따라 기하 급수적으로 증가합니다. 더 나아가
최적화 노력은 다양한 *조인의 지원으로 인해 발생합니다.
메소드* (예 : 중첩 루프, 인덱스 스캔, Postgres의 합병)
개별 조인 및 다양한 * 지수 * (예 : R- 트리,
B-Tree, Postgres의 해시) 관계에 대한 접근 경로.
현재 Postgres Optimizer 구현은 *근접한 것을 수행합니다.
대체 전략의 공간에 대한 철저한 검색*. 이 쿼리
최적화 기술은 데이터베이스 응용 프로그램을 지원하기에 부적절합니다
인공과 같은 광범위한 쿼리의 필요성을 포함하는 도메인
지능.
광업 대학의 자동 제어 연구소 및
독일 프라이 버그에서 기술은 설명 된 문제를
사람들은 Postgres DBM을 결정의 백엔드로 가져 가고 싶었습니다.
전기 유지 관리를위한 지식 기반 시스템 지원
전원 그리드. DBM은
지식 기반 시스템의 추론 기계.
가능한 쿼리의 공간을 탐색하는 데있어 성능 문제
계획은 새로운 최적화 기술에 대한 수요가 발생했습니다.
다음에서 우리는 *유전자의 구현을 제안합니다.
데이터베이스 쿼리 최적화 문제의 옵션으로 알고리즘*.
2.) 유전자 알고리즘 (GA)
==========================
GA는
결정된 무작위 검색. 가능한 솔루션 세트
최적화 문제는 *개인 *의 *인구 *로 간주됩니다.
개인의 환경에 대한 적응 정도가 지정됩니다.
*피트니스 *에 의해.
검색 공간에서 개인의 좌표가 표시됩니다.
*염색체 *에 의해, 본질적으로는 일련의 문자열이 있습니다. * 유전자 *는 a입니다
단일 매개 변수의 값을 인코딩하는 염색체의 하위 섹션
최적화. 유전자에 대한 전형적인 인코딩은 * 이진 * 또는 일 수 있습니다
*정수*.
진화 작업의 시뮬레이션 *재조합 *,
*돌연변이*및*선택*새로운 세대의 검색 지점이 발견됩니다.
그것은 그들의 조상보다 평균 체력이 높습니다.
"comp.ai.genetic"FAQ에 따르면 스트레스를받을 수 없습니다.
GA가
문제. GA는 확률 론적 프로세스를 사용하지만 결과는 분명히
비 랜덤 (무작위보다 낫다).
GA의 구조화 된 다이어그램 :
-------------------------------
p (t) 한 번에 조상의 생성 t
p ''(t) 한 번에 후손의 생성 t
+========================================+
| 알고리즘 ga <<<<<<<<<<<<<<<<<<<<<<< |
+========================================+
| 초기화 t : = 0 |
+========================================+
| 초기화 p (t) |
+========================================+
| p (t) |의 평가 체력 평가
+========================================+
| 기준을 중지하지 않고 |
| +------------------------------------+
| | p '(t) : = 재조합 p (t) |
| +------------------------------------+
| | p ''(t) : = 돌연변이 p '(t) |
| +------------------------------------+
| | p (t + 1) : = 선택 p ''(t) + p (t) |
| +------------------------------------+
| | p ''(t) |의 평가 체력 평가
| +------------------------------------+
| | t : = t + 1 |
+===+===================================+
3.) PostgreSQL의 유전자 쿼리 최적화 (GEQO)
===================================================
GEQO 모듈은 쿼리 솔루션을위한 것입니다.
최적화 문제 여행 판매원 문제 (TSP)와 유사합니다.
가능한 쿼리 계획은 정수 문자열로 인코딩됩니다. 각 문자열
쿼리의 한 관계에서 다음과의 결합 순서를 나타냅니다.
E. g., 쿼리 트리 /\
/\ 2
/\ 3
4 1은 정수 문자열 '4-1-3-2'로 인코딩됩니다.
즉, 먼저 관계 '4'와 '1', 그런 다음 '3'에 가입하고
그런 다음 '2', 여기서 1, 2, 3, 4는 postgresql에서 링됩니다.
GEQO 모듈의 일부는 D. Whitley의 Genitor에서 수정되었습니다.
연산.
PostgreSQL에서 GEQO 구현의 특정 특성
이다:
o * 정상 상태 * ga의 사용 (가장 적합하지 않은 교체
전체 세대 교체가 아닌 인구의 개인)
개선 된 쿼리 계획에 대한 빠른 수렴이 가능합니다. 이것은
합리적인 시간으로 쿼리 처리에 필수적입니다.
o 특히 가장 적합한 * 에지 재조합 크로스 오버 *의 사용
GA를 통해 TSP의 솔루션에 대해 가장자리 손실을 낮게 유지합니다.
o 유전자 운영자로서의 돌연변이는 수리되지 않도록 감가 상승
법적 TSP 투어를 생성하려면 메커니즘이 필요합니다.
GEQO 모듈은 Postgresql DBMS에 다음과 같은 이점을 제공합니다.
Postgres Query Optimizer 구현과 비교하여 :
o 비 모성 검색을 통한 대규모 결합 쿼리 처리;
o 더 이상 쿼리 계획의 비용 크기 근사화 개선
계획 병합이 필요합니다 (GEQO 모듈은 비용을 평가합니다.
개인으로서의 쿼리 계획).
참조
===========
J. Heitk "Otter, D. Beasley :
-------------------------------
"진화 계산에 대한 히치 하이커의 안내서",
'comp.ai.genetic'의 FAQ
'ftp://ftp.germany.eu.net/pub/research/softcomp/ec/welcome.html'
Z. Fong :
--------
"Postgres Query Optimizer의 설계 및 구현",
'postgres-papers'분포에 'planner/report.ps'를 파일
R. Elmasri, S. Navathe :
-------------------------
"데이터베이스 시스템의 기본 사항",
Benjamin/Cummings Pub., Inc.
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
* postgresql에 대한 일이 남아있는 것 *
= 유전자 쿼리 최적화 (GEQO) =
* 모듈 구현 *
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
* Martin Utesch * 자동 제어 연구소 *
= = 광산 및 기술 대학 =
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
1.) 기본 개선
========================================================================
a) 쿼리가 이미 처리 될 때 메모리 무료 개선 :
----------------------------------------------------------------------------------
대규모 결합 쿼리로 유전자 쿼리에 소요되는 컴퓨팅 시간
최적화는 시간 포스트 그레스의 단순한 * 분수 * 인 것 같습니다.
일상적인 'MemoryContextFree'를 통해 메모리를 해제해야합니다.
'백엔드/utils/mmgr/mcxt.c'파일;
디버깅은 그것이 루틴의 루프에 붙어 있음을 보여주었습니다.
'OrderedElempop', 파일 '백엔드/utils/mmgr/oset.c';
정상을 사용할 때 긴 쿼리에서 동일한 문제가 발생합니다.
Postgres 쿼리 최적화 알고리즘;
b) 유전자 알고리즘 매개 변수 설정 향상 :
------------------------------------------------
'백엔드/최적화/geqo/geqo_params.c'파일, 루틴
'gimme_pool_size'및 'gimme_number_generations';
매개 변수 설정에 대한 타협을 찾아야합니다.
두 가지 경쟁 요구를 충족시키기 위해 :
1. 쿼리 계획의 최적 성
2. 컴퓨팅 시간
c) 정수 오버플로를위한 더 나은 솔루션 찾기 :
----------------------------------------------------------
'백엔드/최적화/geqo/geqo_eval.c', 루틴 파일
'geqo_joinrel_size';
Maxint Overflow의 현재 해킹은 Postgres 정수를 설정하는 것입니다.
로그에 'rel- size'의 값;
'Backend/Nodes/Relation.h'에서 'struct rel'의 수정
분명히 전체 PostgreSQL 구현에 심각한 영향을 미칩니다.
d) 소진 된 메모리를위한 솔루션 찾기 :
--------------------------------------------
쿼리와 관련된 10 개 이상의 관계에서 발생할 수 있습니다.
'백엔드/최적화/geqo/geqo_eval.c', 루틴 파일
재귀 적으로 호출되는 'gimme_tree';
어쩌면 나는 올바르게 풀어야 할 것을 잊었을 것입니다. 그러나 나는 무엇을하지 않을 것입니다.
물론 조인의 'Rel'데이터 구조는 계속 증가하고 있으며
성장하는 관계는 더 많은 관계가 포장됩니다.
제안을 환영합니다 :-(
2.) 추가 개선
========================================================================
PostgreSQL 내에서 덤불 쿼리 트리 처리를 활성화합니다.
쿼리 계획의 품질을 향상시킬 수 있습니다.