Использует ли HAWQ повторно процессы QE после завершения запроса?

Процессы исполнителя запросов создаются в сегментах для выполнения запросов. Когда я делаю запрос, я вижу работающие QE. Но когда запрос завершен, они все еще живы в состоянии простоя. Использует ли HAWQ повторно процессы QE после завершения запроса?


person Chunling Wang    schedule 07.07.2016    source источник


Ответы (5)


Да, процесс HAWQ QE сохраняется на уровне сеанса. Если вы уже завершили запрос, но сеанс активен, следующий запрос, отправленный через тот же сеанс, будет повторно использовать уже запущенные QE.

Возможны два явления: 1) Количество перехваченных процессов QE меньше, чем QE, необходимых для нового запроса на том же хосте. В этом случае HAWQ повторно использует перехваченные QE, а также запускает новые QE для недостаточного количества. 2) Количество перехваченных процессов QE превышает количество QE, необходимых для нового запроса на том же хосте. В этом случае HAWQ выберет несколько QE внутри этих перехваченных QE. Вы увидите, что некоторые QE все еще простаивают.

Количество необходимых QE определяется менеджером ресурсов.

Кроме того, если вы запустите команду «SET», если на хостах сегмента есть перехваченные QE, все QE будут повторно использованы. Но если перехваченных QE нет, команда «SET» не будет запускать QE в сегменте.

person Lili Ma    schedule 10.07.2016

Кэш QE в HAWQ предназначен для двух целей:

  1. Повторно используйте QE между последовательными запросами, чтобы избежать их разветвления каждый раз, когда мы запускаем запрос, и, таким образом, повысить производительность запросов, особенно для небольших запросов.

  2. Отладка в разработке функций и исправление ошибок.

QE текущего запроса освобождаются, если текущий сеанс закрыт или они простаивают после gp_vmem_idle_resource_timeout мс. По умолчанию это 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
}
person huor    schedule 08.07.2016

Да. Если через какой-то интервал приходит другой запрос, QE можно использовать повторно. Если этот интервал истечет, QE завершатся.

person Wen Lin    schedule 07.07.2016
comment
Какой интервал установлен по умолчанию? Может ли этот интервал быть установлен пользователем? - person Chunling Wang; 07.07.2016

Кроме того, выход из сеанса приведет к завершению всех разветвленных QE независимо от интервала.

person ztao1987    schedule 07.07.2016

Интервал GUC равен gp_vmem_idle_resource_timeout, вы можете установить его в своей сессии.

person yanqing weng    schedule 07.07.2016