`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`.
{
    auto lock = getLock();
    
    if (!shared->system_logs)
        return {};
    
    
    
    if (part_database == DatabaseCatalog::SYSTEM_DATABASE)
        return {};
    return shared->system_logs->part_log;
}
std::shared_ptr<TraceLog> Context::getTraceLog() const
{
    auto lock = getLock();
    if (!shared->system_logs)
        return {};
    return shared->system_logs->trace_log;
}
std::shared_ptr<TextLog> Context::getTextLog() const
{
    auto lock = getLock();
    if (!shared->system_logs)
        return {};
    return shared->system_logs->text_log;
}
std::shared_ptr<MetricLog> Context::getMetricLog() const