Simply record the time from entering `main` to start listening sockets.
if (config().has("disable_internal_dns_cache") && config().getInt("disable_internal_dns_cache"))
    {
        
        DNSResolver::instance().setDisableCacheFlag();
        LOG_DEBUG(log, "DNS caching disabled");
    }
    else
    {
        
        dns_cache_updater = std::make_unique<DNSCacheUpdater>(
            global_context, config().getInt("dns_cache_update_period", 15), config().getUInt("dns_max_consecutive_failures", 5));
    }
    if (dns_cache_updater)
        dns_cache_updater->start();
    
    
    global_context->setCurrentDatabaseNameInGlobalContext(default_database);
    LOG_INFO(log, "Loading metadata from {}", path_str);
    try
    {
        auto & database_catalog = DatabaseCatalog::instance();
        
        database_catalog.initializeAndLoadTemporaryDatabase();
        loadMetadataSystem(global_context);
        maybeConvertSystemDatabase(global_context);
        
        global_context->initializeSystemLogs();
        global_context->setSystemZooKeeperLogAfterInitializationIfNeeded();
        
        attachSystemTablesServer(global_context, *database_catalog.getSystemDatabase(), has_zookeeper);