Vamos nos aprofundar sobre os níveis de bloqueio em um banco de dados. Como nível mais alto, nós temos o próprio sistema gerenciador de banco de dados, onde o bloqueio é aplicado em todo este banco, ou seja, em todos os recursos que compõem o banco de dados. Então, vai ser impedido que demais transações realizem o acesso e, consequentemente, modificação, adição ou exclusão de dados de qualquer recurso durante a vigência deste bloqueio. Logo em seguida, nós temos o bloqueio aplicado em toda uma tabela. Então, impede que as demais transações acessem qualquer parte dessa tabela. É um bloqueio mais simples de implementar e também mais fácil da gente compreender. Basicamente, bloqueia uma tabela e durante aquele momento, ninguém mais realiza acessos à tabela bloqueada. Depois, nós temos o bloqueio de página. Então, este é um bloqueio que acontece em blocos de dados, que são as páginas, são um conjunto de linhas. E nós vamos perceber que nós temos uma menor granularidade em comparação com o bloqueio de linha, pois várias linhas são bloqueadas juntas. E aqui podem também conter dados de múltiplos objetos, de múltiplas tabelas. Em seguida, nós temos o objeto, e aqui o bloqueio é aplicado a um objeto individual do banco de dados, que pode ser uma própria tabela, pode ser um índice, pode ser uma Store Procedure, que é o procedimento armazenado. Este tipo de bloqueio pode ser mais complexo de ser implementado e gerenciado. E o quinto nível de bloqueio, o nível mais baixo, cada linha pode ser bloqueada de maneira independente, cada registro é bloqueado de maneira independente. Outros registros, outras linhas numa tabela, ficam disponíveis para serem acessadas e modificadas por outras transações simultaneamente. Ainda nesses níveis de bloqueio, nós vamos perceber banco de dados, um nível extremamente mais simples, é o banco inteiro que fica bloqueado, traz uma alta exclusividade para aquela transação, uma baixa concorrência e com certeza atrasos prolongados na execução, uma vez que cada transação fica com o banco inteiramente disponível para si e somente si mesmo, ou seja, o atraso aqui, o risco de demora é bastante alto porque vai ter uma fila de transações aguardando a liberação do banco de dados para serem executadas. Depois nós temos a tabela que também é um bloqueio simples, ele vai evitar problemas de conflito, a tabela inteira vai ficar exclusiva para a transação, a concorrência também é baixa, porque com certeza uma tabela tem o potencial de incinerar diversas transações, então nós temos aqui um risco também de demora ou de atrasos e de gargalos operacionais. Já na página, nós temos a possibilidade de uma redução da carga de trabalho que o sistema de banco de dados faz na gestão dos bloqueios e desbloqueios. Consequentemente, também, menos bloqueios são mantidos e coordenados, porque o bloqueio é aplicado em bloco, em um conjunto de linhas. E também aqui vai existir um risco de bloqueio em massa, porque a transação vai ocasionar um bloqueio de página, que são múltiplas linhas ou múltiplos registros. E consequentemente outras transações vão tentar acessar registros que já estão bloqueados, porque fazem parte da página previamente bloqueada. Então existe um risco de bloqueio em massa. Depois, nós temos o objeto, que vai caracterizar um bloqueio de granularidade flexível, minimiza a quantidade de bloqueios, melhora desempenho e concorrência também, quando bem implementado. Então, é preciso ficar bastante atento à complexidade de implementação de bloqueios de objetos, sejam índices, store procedures ou as próprias tabelas. E também vai ter um certo risco de atraso ou de gargalo das demais transações que estão aguardando para serem executadas. E por fim, nós temos o bloqueio de linha, que é uma granularidade fina, registro a registro, está sendo bloqueado e desbloqueado. Tem o potencial de minimizar bloqueios desnecessários, que é algo muito importante. Permite uma maior concorrência, porque mais transações vão conseguir realizar operações nas demais linhas da tabela que não estão sendo bloqueadas e vai trazer para o sistema de gerenciador de banco de dados um maior esforço de gestão de toda essa quantidade de bloqueios e desbloqueios que estão acontecendo para executar todas as transações, sobretudo em tabelas muito extensas, tabelas com muitas linhas.