2016-07-07 6 views

답변

0

예. 일정한 간격으로 다른 쿼리가 나오면 QE를 다시 사용할 수 있습니다. 이 간격이 초과되면 QE가 종료됩니다.

+0

간격은 기본적으로 얼마나 오래 설정되어 있습니까? 이 간격을 사용자가 설정할 수 있습니까? –

0

또한 세션을 종료해도 간격에 관계없이 모든 분기 된 QE가 종료됩니다.

0

간격 GUC는 gp_vmem_idle_resource_timeout이므로 세션에서 설정할 수 있습니다.

1

HAWQ에 QES의 캐시는 두 가지 목적을 위해 설계되었습니다 연속 쿼리 사이

  1. 재사용 QES을 그들에게 우리가 쿼리를 실행할 때마다 분기 방지, 따라서 쿼리 성능을 향상하기 위해, 특수 작은 쿼리.

  2. 기능 개발 및 버그 수정에서 디버그하십시오.

현재 세션이 닫히거나 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 
} 
2

예, 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를 시작하지 않습니다.