Simply record the time from entering `main` to start listening sockets.
rlim.rlim_cur = rlim.rlim_max;
            int rc = setrlimit(RLIMIT_NPROC, &rlim);
            if (rc != 0)
            {
                LOG_WARNING(log, "Cannot set max number of threads to {}. error: {}", rlim.rlim_cur, errnoToString());
                rlim.rlim_cur = old;
            }
            else
            {
                LOG_DEBUG(log, "Set max number of threads to {} (was {}).", rlim.rlim_cur, old);
            }
        }
        if (rlim.rlim_cur < 30000)
        {
            global_context->addWarningMessage("Maximum number of threads is lower than 30000. There could be problems with handling a lot of simultaneous queries.");
        }
    }
    static ServerErrorHandler error_handler;
    Poco::ErrorHandler::set(&error_handler);
    
    LOG_DEBUG(log, "Initializing DateLUT.");
    DateLUT::instance();
    LOG_TRACE(log, "Initialized DateLUT with time zone '{}'.", DateLUT::instance().getTimeZone());
    
    if (auto temporary_policy = config().getString("tmp_policy", ""); !temporary_policy.empty())
    {
        size_t max_size = config().getUInt64("max_temporary_data_on_disk_size", 0);
        global_context->setTemporaryStoragePolicy(temporary_policy, max_size);
    }
    else if (auto temporary_cache = config().getString("temporary_data_in_cache", ""); !temporary_cache.empty())