**Describe the bug**
Using `ALTER LIVE VIEW view REFRESH` results in an exception.

**How to reproduce**
* Connected to ClickHouse server version 20.8.1 revision 54438
* `CREATE TABLE` statements for all tables involved
```
clicktest :) SHOW CREATE table0

SHOW CREATE TABLE table0

┌─statement─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE default.table0
(
    `d` Date,
    `a` String,
    `b` UInt8,
    `x` String,
    `y` Int8
)
ENGINE = MergeTree()
ORDER BY d
SETTINGS index_granularity = 8192 │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.006 sec.
```
* Queries to run that lead to unexpected result
```
ClickHouse client version 20.8.1.4447 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.8.1 revision 54438.

clicktest :) SET allow_experimental_live_view=1

SET allow_experimental_live_view = 1

Ok.

0 rows in set. Elapsed: 0.003 sec.

clicktest :) CREATE LIVE VIEW live1 AS SELECT * FROM table0

CREATE LIVE VIEW live1 AS
SELECT *
FROM table0

Ok.

0 rows in set. Elapsed: 0.008 sec.

clicktest :) ALTER LIVE VIEW live1 REFRESH

ALTER LIVE VIEW live1
    REFRESH

Received exception from server (version 20.8.1):
Code: 49. DB::Exception: Received from localhost:9000. DB::Exception: RWLockImpl::getLock(): RWLock is already locked in exclusive mode.

0 rows in set. Elapsed: 0.005 sec.
```
**Expected behavior**
A clear and concise description of what you expected to happen.


PartitionCommands partition_commands;
    MutationCommands mutation_commands;
    LiveViewCommands live_view_commands;
    for (ASTAlterCommand * command_ast : alter.command_list->commands)
    {
        if (auto alter_command = AlterCommand::parse(command_ast))
            alter_commands.emplace_back(std::move(*alter_command));
        else if (auto partition_command = PartitionCommand::parse(command_ast))
        {
            partition_commands.emplace_back(std::move(*partition_command));
        }
        else if (auto mut_command = MutationCommand::parse(command_ast))
        {
            if (mut_command->type == MutationCommand::MATERIALIZE_TTL && !metadata_snapshot->hasAnyTTL())
                throw Exception("Cannot MATERIALIZE TTL as there is no TTL set for table "
                    + table->getStorageID().getNameForLogs(), ErrorCodes::INCORRECT_QUERY);
            mutation_commands.emplace_back(std::move(*mut_command));
        }
        else if (auto live_view_command = LiveViewCommand::parse(command_ast))
            live_view_commands.emplace_back(std::move(*live_view_command));
        else
            throw Exception("Wrong parameter type in ALTER query", ErrorCodes::LOGICAL_ERROR);
    }
    if (!mutation_commands.empty())
    {
        MutationsInterpreter(table, metadata_snapshot, mutation_commands, context, false).validate();
        table->mutate(mutation_commands, context);
    }
    if (!partition_commands.empty())
    {