Académique Documents
Professionnel Documents
Culture Documents
Neste artigo vamos tratar de locks e como trabalhar com eles no SQL Server.
Esta semana vamos falar de locks e como trabalhar com eles. O Sql server trabalha com 2 tipos de isolation level (nvel de isolamento), Otimista e Pessimista. O otimista tem como premissa a alta concorrncia entre as conexes, ou seja, todos podem ler, inserir, atualizar e apagar sem nenhuma restrio a outras conexes. possvel ter este tipo de isolao pelo comando:
Dirty read quando minha conexo est lendo informaes que ainda no foram comitadas, ou seja, a informao que li pode no existir ou mesmo ter sido modificada. Nonrepeatable read Ocorre quando eu tenho uma transao e nesta transao eu leio a informao mais de uma vez, na primeira leitura veio uma informao e na segunda e demias vieram outras informaes, ou seja, no garanto a consistncia da informao dentro da mesma transao Phanton read Este tipo de inconsistncia ocorre quando eu busco uma informao dentro de uma transao por exemplo por um determinado cep, o sistema me retorna 100 registros, quando dou update apenas 99 so atingidos, entre a leitura e o update 1 registro foi modificado e saiu da clausula WHERE ou foi apagado, poderia tambm ao invs de ser 99 registros atingidos serem 101, 102. Entre o select e o update usurios podem ter inserido registros que foram cobertos pela clausula WHERE. Por isto chamado de phanton ou fantasma, aparecem e somem registros na mesma transao.
No tipo de isolamento Pessimista existe a concorrncia de acessos, e dependendo do tipo de isolamento o grau de concorrncia ser muito baixo, o que pode provocar muitos deadlocks e blocks. READ COMMITED Este o isolation level default usado pelo SQL no Read Commited os registros so bloqueados quando se est fazendo a leitura do mesmo, por isto o tipo de inconsistncia Dirty Read no existe, leio somente informaes comitadas. Ao dar o update tambm o registro bloqueado para a conexo at o commit ou rollback (implcito ou explicito). REPEATABLE READ Este tipo de isolamento segura os registros para a conexo na leitura at o fim da transao, nenhum usurio pode alterar ou apagar estes registros at que a conexo encontre um commit ou rolback (implcito ou explicito), Os Dirtys Reads e NonRepeatable Reads no ocorrem, porm podem ocorrer os phantons. S utilizar este tipo de isolamento quando estritamente necessrio. SERIAZABLE Este o tipo de isolamento mais restrito, este no permite a leitura (select), atualizao (update), insero (insert) ou remoo (delete) de nenhum registro que est sendo lido, at que encontre o commit ou rollback (implcito ou explicito). Os Dirty Reads, NonRepeatable Reads e Phanton no ocorrem. S utilizar este tipo de isolamento quando estritamente necessrio.
Dirty Read NonRepeatable Read Phanton READ UNCOMMITED Sim READ COMMITED REPEATABLE READ SERIALIZABLE No No No Sim Sim No No Sim Sim Sim No
Por default o SQL faz todo este trabalho de locking por ns sem precisarmos nos preocupar, apenas em tarefas mais avanadas existe a necessidade de se mudar o ISOLATION level ou usar algum hint. HINTS Os hints nos permitem modificar o comportamento default do SQL sem precisarmos mudar o isolation Level, que mudaria todos os comandos na sesso corrente. So utilizados nos prprios comandos DML, seguem alguns. O sql pode bloquear se necessrio um campo, um registro, um conjunto de registros, uma tabela, uma pgina de 8k, um extended que so 8 pginas de 8k ou o banco de dados inteiro, tudo isto depende de como voc utiliza as queries. Para verificar os locks e tipos de locks utilize a SP_LOCK. Exemplo.
Neste comando eu iria estar dando Block em toda a tabela, porque no especifiquei campos e nem WHERE at o sql me trazer todos os registros. Exemplo.
O Sql identifica o melhor modo de bloquear de acordo com seu nvel de isolamento, utilizando os modos abaixo: Modo de bloqueio
IS S U IX
Tipos de Hints
Bloqueia os registros at o fim da operao Le todos os registros mesmo os com locking Bloqueia um registro Bloqueia toda a pgina Bloqueia toda a tabela Le apenas os registros comitados e pula os bloquedos Atualiza registros bloqueados O mesmo comportamento do isolation level descrito
REPEATABLEREAD O mesmo comportamento do isolation level descrito READCOMMITED READCOMMITED O mesmo comportamento do isolation level descrito O mesmo comportamento do isolation level descrito
Exemplo especificando hints. Iniciei uma transao pela conexo 51, estou alterando o nome de uma compania no Northwind, iniciei o Begin Tran, mas no tem rollback ou Commit.
Sem resposta, para outras conexes, porque o nvel de isolamento default do SQL (Read Commited) bloqueia o regstro na leitura e na atualizao.
Agora colocando um hint (nolock) possvel ler os registros, como Read uncommited.
Definindo-se o isolation level automaticamente o SQL assume o tipo e lock necessrio para a transao, se voc precisa de um comportamento diferente em apenas alguns comandos, pode utilizar os Hints, mas apenas quando necessrio, indicado tambm que se tome cuidado ao se dar comandos como insert e select porque podem influenciar nos blocks e deadlocks, como tambm acessar e atualizar as tabelas sempre na mesma ordem, como guidline procure dividir os comandos muitos extensos de select e update em pequenos blocos de comandos se possvel. Hints so muito utilizados em sites de grande concorrncia como compra de tickets areos, bolsa de valores etc. At mais. O Sql identifica o melhor modo de bloquear de acordo com seu nvel de isolamento, utilizando os modos abaixo: Modo de bloqueio
IS S U IX
Tipos de Hints
Bloqueia os registros at o fim da operao Le todos os registros mesmo os com locking Bloqueia um registro Bloqueia toda a pgina Bloqueia toda a tabela Le apenas os registros comitados e pula os bloquedos Atualiza registros bloqueados O mesmo comportamento do isolation level descrito
REPEATABLEREAD O mesmo comportamento do isolation level descrito READCOMMITED READCOMMITED O mesmo comportamento do isolation level descrito O mesmo comportamento do isolation level descrito
Exemplo especificando hints. Iniciei uma transao pela conexo 51, estou alterando o nome de uma compania no Northwind, iniciei o Begin Tran, mas no tem rollback ou Commit.
Sem resposta, para outras conexes, porque o nvel de isolamento default do SQL (Read Commited) bloqueia o regstro na leitura e na atualizao.
Agora colocando um hint (nolock) possvel ler os registros, como Read uncommited.
Definindo-se o isolation level automaticamente o SQL assume o tipo e lock necessrio para a transao, se voc precisa de um comportamento diferente em apenas alguns comandos, pode utilizar os Hints, mas apenas quando necessrio, indicado tambm que se tome cuidado ao se dar comandos como insert e select porque podem influenciar nos blocks e deadlocks, como tambm acessar e atualizar as tabelas sempre na mesma ordem, como guidline procure dividir os comandos muitos extensos de select e update em pequenos blocos de comandos se possvel. Hints so muito utilizados em sites de grande concorrncia como compra de tickets areos, bolsa de valores etc. At mais. O Sql identifica o melhor modo de bloquear de acordo com seu nvel de isolamento, utilizando os modos abaixo: Modo de bloqueio
IS S U IX
Tipos de Hints
Bloqueia os registros at o fim da operao Le todos os registros mesmo os com locking Bloqueia um registro Bloqueia toda a pgina Bloqueia toda a tabela Le apenas os registros comitados e pula os bloquedos Atualiza registros bloqueados O mesmo comportamento do isolation level descrito
REPEATABLEREAD O mesmo comportamento do isolation level descrito READCOMMITED READCOMMITED O mesmo comportamento do isolation level descrito O mesmo comportamento do isolation level descrito
Exemplo especificando hints. Iniciei uma transao pela conexo 51, estou alterando o nome de uma compania no Northwind, iniciei o Begin Tran, mas no tem rollback ou Commit.
Sem resposta, para outras conexes, porque o nvel de isolamento default do SQL (Read
Agora colocando um hint (nolock) possvel ler os registros, como Read uncommited.
Definindo-se o isolation level automaticamente o SQL assume o tipo e lock necessrio para a transao, se voc precisa de um comportamento diferente em apenas alguns comandos, pode utilizar os Hints, mas apenas quando necessrio, indicado tambm que se tome cuidado ao se dar comandos como insert e select porque podem influenciar nos blocks e deadlocks, como tambm acessar e atualizar as tabelas sempre na mesma ordem, como guidline procure dividir os comandos muitos extensos de select e update em pequenos blocos de comandos se possvel. Hints so muito utilizados em sites de grande concorrncia como compra de tickets areos, bolsa de valores etc. At mais. O Sql identifica o melhor modo de bloquear de acordo com seu nvel de isolamento, utilizando os modos abaixo: Modo de bloqueio
IS S U IX
Tipos de Hints
Bloqueia os registros at o fim da operao Le todos os registros mesmo os com locking Bloqueia um registro Bloqueia toda a pgina Bloqueia toda a tabela Le apenas os registros comitados e pula os bloquedos Atualiza registros bloqueados O mesmo comportamento do isolation level descrito
REPEATABLEREAD O mesmo comportamento do isolation level descrito READCOMMITED READCOMMITED O mesmo comportamento do isolation level descrito O mesmo comportamento do isolation level descrito
Exemplo especificando hints. Iniciei uma transao pela conexo 51, estou alterando o nome de uma compania no Northwind, iniciei o Begin Tran, mas no tem rollback ou Commit.
Sem resposta, para outras conexes, porque o nvel de isolamento default do SQL (Read Commited) bloqueia o regstro na leitura e na atualizao.
Agora colocando um hint (nolock) possvel ler os registros, como Read uncommited.
Definindo-se o isolation level automaticamente o SQL assume o tipo e lock necessrio para a transao, se voc precisa de um comportamento diferente em apenas alguns comandos, pode utilizar os Hints, mas apenas quando necessrio, indicado tambm que se tome cuidado ao se dar comandos como insert e select porque podem influenciar nos blocks e deadlocks, como tambm acessar e atualizar as tabelas sempre na mesma ordem, como guidline procure dividir os comandos muitos extensos de select e update em pequenos blocos de comandos se possvel. Hints so muito utilizados em sites de grande concorrncia como compra de tickets areos, bolsa de valores etc. At mais.
Fonte: http://www.linhadecodigo.com.br/ArtigoImpressao.aspx?id=666