조회 실행 프로세스는 세그먼트에서 작성되어 조회 실행을 수행합니다. 쿼리를 수행 할 때 작동중인 QE를 볼 수 있습니다. 그러나 쿼리가 끝나면 유휴 상태가 지속됩니다. HAWQ는 쿼리가 끝난 후 QE 프로세스를 재사용합니까?쿼리가 완료된 후 HAWQ가 QE 프로세스를 다시 사용합니까?
답변
예. 일정한 간격으로 다른 쿼리가 나오면 QE를 다시 사용할 수 있습니다. 이 간격이 초과되면 QE가 종료됩니다.
또한 세션을 종료해도 간격에 관계없이 모든 분기 된 QE가 종료됩니다.
간격 GUC는 gp_vmem_idle_resource_timeout이므로 세션에서 설정할 수 있습니다.
HAWQ에 QES의 캐시는 두 가지 목적을 위해 설계되었습니다 연속 쿼리 사이
재사용 QES을 그들에게 우리가 쿼리를 실행할 때마다 분기 방지, 따라서 쿼리 성능을 향상하기 위해, 특수 작은 쿼리.
기능 개발 및 버그 수정에서 디버그하십시오.
현재 세션이 닫히거나 gp_vmem_idle_resource_timeout ms 후에 유휴 상태이면 현재 쿼리의 QE가 해제됩니다. 디버그 빌드에서 10 분, 릴리즈 빌드에서 기본적으로 18 초입니다. 자세한 내용은 guc.c을 참조하십시오.
{
{"gp_vmem_idle_resource_timeout", PGC_USERSET, CLIENT_CONN_OTHER,
gettext_noop("Sets the time a session can be idle (in milliseconds) before we release gangs on the segment DBs to free resources."),
gettext_noop("A value of 0 turns off the timeout."),
GUC_UNIT_MS | GUC_GPDB_ADDOPT
},
&IdleSessionGangTimeout,
#ifdef USE_ASSERT_CHECKING
600000, 0, INT_MAX, NULL, NULL /* 10 minutes by default on debug builds.*/
#else
18000, 0, INT_MAX, NULL, NULL
#endif
}
예, HAWQ QE 프로세스는 세션 수준으로 유지됩니다. 이미 세션을 사용하여 쿼리를 완료 한 경우 동일한 세션을 통해 보낸 다음 쿼리는 이미 시작된 QE를 다시 사용합니다.
두 가지 현상이 있습니다. 1) catch 된 QE 프로세스 번호가 동일한 호스트에서 새 쿼리에 필요한 QE보다 적습니다. 이 경우 HAWQ는 중단 된 QE를 재사용하고 불충분 한 번호에 대해 새로운 QE를 시작합니다. 2) catch 된 QE 프로세스 번호가 동일한 호스트에서 새 쿼리에 필요한 QE보다 큽니다. 이 경우 HAWQ는 이러한 QE의 내부에서 일부 QE를 선택합니다. QE가 여전히 유휴 상태임을 알 수 있습니다.
필요한 QE 수는 자원 관리자가 결정합니다.
Moveover "SET"명령을 실행하면 세그먼트 호스트에 QE가있는 경우 모든 QE가 다시 사용됩니다. 그러나 정지 된 QE가 없으면 "SET"명령은 세그먼트의 QE를 시작하지 않습니다.
간격은 기본적으로 얼마나 오래 설정되어 있습니까? 이 간격을 사용자가 설정할 수 있습니까? –