Este é um post disponível para assinantes MVPArtigo SQL Magazine 20 - Gerenciando de locks no SQL Server 2000
Artigo da Revista SQL Magazine - Edição 20.
Clique aqui para ler todos os artigos desta edição
Gerenciamento de locks no SQL Server 2000
Eduardo Terra Morelli
Uma das grandes características do SQL Server em sua versão 2000 é a automatização de praticamente todos os ajustes internos. Desta forma, o DBA supostamente não deve se preocupar com questões como alocação de memória para páginas oriundas dos arquivos, dimensionamento de áreas para armazenamento de transações e controle de mecanismos de proteção de dados (para que duas transações não gravem o mesmo dado ao mesmo tempo), dentre outras. Entretanto, dois problemas são bastante comuns em ambientes onde muitos usuários trabalham de forma concorrente: espera e deadlocks (ler Nota 1). Para esses casos, se deixarmos a resolução por conta do gerenciador, podem ocorrer demoras indesejáveis e, conseqüentemente, grande volume de retrabalho.
Nota 1. Deadlock
Trata-se de um termo largamente utilizado em publicações técnicas em português, cuja tradução literal seria algo como “espera até a morte”, significando um impasse sem solução.
Este artigo visa esmiuçar a gerência de locks realizada pelo SQL Server 2000 para que seja possível tomar medidas que minimizem os problemas citados acima.
Espera-se que o leitor já tenha alguma vivência em SQL Server, conhecendo suas principais ferramentas tais como Query Analyzer ou Enterprise Manager.
Fundamentos
Os dois problemas que motivaram esta matéria, a espera (blocking) e deadlocks, costumam ser confundidos. O primeiro acontece quando um usuário deve aguardar enquanto outro “prende” recursos que ele precisa. Por exemplo, suponha dois usuários, Zebedeu e Epaminondas, que precisem alterar o mesmo dado ao mesmo tempo. Enquanto o primeiro atualiza, o segundo aguarda sua vez, já que um dado não pode ser alterado por mais de um usuário ao mesmo tempo.
O fato de um usuário esperar não chega a ser um problema, já que decorre da convivência entre vários usuários, ou mais tecnicamente, da concorrência. Mas, caso essas esperas comecem a acontecer com muita freqüência e com grandes durações, os usuários passarão a reclamar. Uma analogia para o fenômeno descrito seria um sinal de trânsito em um cruzamento movimentado. Enquanto os veículos de uma via passam, os da outra aguardam.
Já deadlock resulta em espera mútua sem perspectiva de solução. Por exemplo, analise o código proposto na Tabela 1.
Tabela 1. Duas conexões em espera mútua.
|
Conexão 1 |
Conexão 2 |
|
begin transaction update historico set nota = 10 select * from alunos |
begin transaction update alunos set tel_aluno = '' " |
ATENÇÃO! A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVP




2
0
