Vamos nos aprofundar no tratamento de conflitos. Nós vimos que no bloqueio pessimista não há eliminação da possibilidade de conflitos e erros durante a execução concorrente das transações. O que acontece é uma transferência da responsabilidade deste tratamento, da aplicação, para que o banco de dados resolva estes possíveis conflitos que estão acontecendo. Então, nós vamos perceber três cenários comuns. Cenário número um é o impasse ou deadlock. Cenário dois é o esgotamento do tempo limite, ou timeout, e o terceiro cenário é a escalada de bloqueio, ou lock escalation. Vamos nos aprofundar nesses três cenários. O impasse, ou deadlock, é quando nós temos duas ou mais transações aguardando que a outra transação libere um recurso que é necessário para progredir, para avançar. Então, nós temos uma situação em que nenhuma das transações consegue progressão, consegue executar as suas operações até o final. Então, este é o deadlock. Ninguém avança. O cenário 2 é o esgotamento do tempo limite ou timeout. Aqui nós temos que um período máximo de tempo que foi configurado no sistema gerenciador banco de dados estourou para que uma operação seja concluída com sucesso. Então, quando esse tempo estoura, a aplicação não consegue avançar, não consegue progredir e a transação é considerada falha ou interrompida. E a escalada de bloqueio, ou lock escalation, é o momento em que o banco de dados decide consolidar bloqueios individuais que estão em níveis mais baixos por exemplo bloqueios de linha em tabelas são consolidadas em bloqueio de página ou bloqueio de uma tabela para justamente reduzir todo o esforço de gestão que o banco de dados tem para executar esses bloqueios e desbloqueios. E com esse esforço reduzido, consequentemente, a eficiência do sistema gerenciador do banco de dados é melhorada. Geralmente, o que acontece é que o banco de dados vai detectar e resolver por meio do cancelamento de uma das transações e liberando, consequentemente, os seus bloqueios. Assim, as demais transações vão entrar em execução. Do lado da aplicação, é importante a gente entender e capturar essa exceção e tentar novamente as transações que são canceladas. A gente ainda pode tentar controlar o comportamento dos bloqueios e justamente reduzir a contenção de outras transações de três maneiras. Primeiro, a aplicação evitar bloquear muitas linhas ou colunas ou muitos registros, usar níveis de isolamento e também colocar os hints, que são as dicas de bloqueio adequadas para aquele processo que estamos tentando executar na nossa aplicação.