async function выполняется синхронно до первого await
Каждый встреченный по ходу выполнения await прерывает функцию, выкидывая из нее вверх по стектрейсу, в случае если это первый await, то продолжит исполняться функция, вызвавшая нашу, но там обычно тоже await, хотя и не обязательно. Так постепенно мы вывалимся в event-loop. Продолжение работы после await вызывается непосредственно из event-loop, так что в этом случае выше по стектрейсу будет только он.
Когда исполнение в event-loop, он просто берет следующую задачу из очереди. Притом async function - это абстракция над промисами и их колбэками, а они выполняются в очереди микротасок, которую event-loop разбирает пока она не станет пустой.
Если ближе к примеру в вопросе, то выполнение будет таким:
1. event-loop вызовет колбэк http сервера, который часть роутера
2. роутер вызовет наш колбэк, он это может делать как синхронно так и асинхронно (express делает синхронно)
3. Наш колбэк отправит запрос в БД, получит его промис и остановится на await
4. мы вернем управление роутеру, а он модулю http и в итоге все вернется в event-loop
5. event-loop возьмет следующую таску из очереди, это может быть как запрос к http серверу, так и ответ от БД