`DataTypeFactory::get` locks a mutex inside shared a context, there was a case when many threads were locked inside it

https://pastila.nl/?0043b3e6/c557368f4cf0eb87a3c6f2cc162bc693

It is not clear which thread locked the mutex for a long time. However, it may be possible to lock less inside `DataTypeFactory::get`.
{
        SERVER,         
        CLIENT,         
        LOCAL,          
        KEEPER,         
    };
    ApplicationType getApplicationType() const;
    void setApplicationType(ApplicationType type);
    
    void setDefaultProfiles(const Poco::Util::AbstractConfiguration & config);
    String getDefaultProfileName() const;
    String getSystemProfileName() const;
    
    String getFormatSchemaPath() const;
    void setFormatSchemaPath(const String & path);
    SampleBlockCache & getSampleBlockCache() const;
    
    bool hasQueryParameters() const;
    const NameToNameMap & getQueryParameters() const;
    void setQueryParameter(const String & name, const String & value);
    void setQueryParameters(const NameToNameMap & parameters) { query_parameters = parameters; }