Xangai Tengke Education Dream Database Training A mesa de compartilhamento de produtos secos está bloqueada, não entre em pânico, a visualização dinâmica ajudará

Como todos sabem, o banco de dados Dameng suporta acesso simultâneo e modificação de dados por vários usuários. No trabalho real, pode haver casos em que várias transações acessam e modificam os mesmos dados ao mesmo tempo. Quando uma transação está ocupando um bloqueio de recurso, outra transação está solicitando um bloqueio neste recurso que conflita com o primeiro bloqueio. Digite, o bloqueio ocorre. Nesse ponto, a transação bloqueada permanecerá suspensa até que a transação que contém o bloqueio desista do recurso bloqueado. Este artigo mostrará como usar a visualização de desempenho dinâmico correspondente para visualizar o bloqueio e como resolver o bloqueio.

 

O ambiente experimental deste artigo: Ambiente de demonstração: DM Database Server x64 V7.1.6.46-Build (2018.02.08-89107) ENT

 

1. Crie uma tabela de teste e insira dados

Tabela de construção:

 

2. Gerar bloqueio TID em T1

Execute a operação de atualização e não envie, as operações específicas são as seguintes:

 

 

 

3. Abra uma nova sessão

3.1 Executar uma operação de seleção em uma nova sessão

 

 

 

Pode-se observar que devido ao mecanismo de múltiplas versões do MVCC, a escrita não bloqueará a leitura, portanto a operação de seleção pode prosseguir normalmente. Mas a transação anterior não foi confirmada, então o resultado da verificação ainda é o valor da versão antiga, que é o valor antes da atualização.


3.2 Realizar operações DML em uma nova sessão

 

 

Nesse ponto, como a operação de exclusão precisa adicionar o mesmo tipo de bloqueio da operação de atualização anterior, ocorre o bloqueio e a transação atual é suspensa.

 

4. Verifique se há bloqueio

Quando ocorre o bloqueio, podemos verificar o estado do bloqueio no banco de dados atual através da visão v $ lock

 

 

 

No resultado, podemos ver que a transação 2399 está bloqueada e a transação que o bloqueia é 2393.

Da mesma forma, também podemos descobrir quem está bloqueando quem por meio da visualização V $ TRXWAIT,

 

 

 

Obtenha o mesmo resultado, a transação com ID 2399 está aguardando a transação com ID 2393 e o tempo de espera é de 1071599 milissegundos.

A seguir, procure as sessões correspondentes às duas transações através da visão V $ SESSIONS

 

 

 

Você pode obter o ID da sessão correspondente às duas transações e à instrução SQL atualmente em execução, e pode saber quais instruções SQL estão bloqueando.

 

5. Soluções de bloqueio

De acordo com os requisitos, existem duas soluções.

 

5.1 Confirme ou reverta a transação de bloqueio.

Com base no acima, podemos ver que o ID da sessão da transação que causou o bloqueio é 2410147992. Neste ponto, só precisamos confirmar ou reverter a transação na sessão, o bloqueio será naturalmente liberado e o bloqueio resolvido.

 

5.2 Fechar a sessão de bloqueio

Da mesma forma, também podemos usar o procedimento do sistema SP_CLOSE_SESSION (SESS_ID) para fechar a sessão correspondente, o uso específico é o seguinte.

 

 

 

Nesse ponto, o bloqueio é liberado e a operação de exclusão pode prosseguir sem problemas.

 

 

 

Acho que você gosta

Origin blog.csdn.net/qq_42726883/article/details/108377617
Recomendado
Clasificación