Professional Documents
Culture Documents
Administrao de Banco de
Dados
1
Tpicos
o
o
o
o
o
o
Lock
Tipos de Lock
Recursos que podem ser bloqueados
Dica de Lock sobre uma Tabela
Dica de Lock em uma Sesso
Compatibilidade entre Locks
2
Lock
o Os Locks servem para impedir que os dados de
suas tabelas sejam atualizadas por mais de um
usurio ao mesmo tempo, o que poderia provocar
inconsistncia no seu database.
o Bancos de Dados Relacionais como o SQL Server
implementam Locks para que um determinado
dado esteja travado enquanto alguem faz uma
modificao naquele dado, nenhum usurio
poder modificar os dados que esto sendo
modificados por outro usurio
3
Tipos de Lock
o
o
o
o
o
SHARED LOCK - X
o o tipo de Lock usado durante o processamento de
comandos que no modificam dados, como o
SELECT.
o O SQL Server permite que um dado possa ser lido
por mais de uma cenxo ao mesmo tempo.
Enquanto esses dados so recuperados, o SQL
Server coloca um lock do tipo compartilhado o que
impede que outros atualizem estes dados enquanto
esto sendo lidos
5
SHARED LOCK - SH
TRANSAO 1
Momento 1
Select na tabela Tab_x
O SQL Server coloca
SHARED
NOS REGISTROS
LIDOS
TRANSAO 2
Momento 1
Select na tabela Tab_x
O SQL Server coloca
SHARED
NOS REGISTROS
LIDOS
EXCLUSIVE LOCK - X
o Bloqueia qualquer acesso inclusive a leitura de um
determinado dado que se encontra bloqueado, este
utilizado durante operaes de
insero/deleo/atualizao de dados;
o So grandes causadores de bloqueio do sistema;
o Operaes que coloquem um Lock exclusivo
devem demorar o mnimo possvel;
EXCLUSIVE LOCK - X
Transao
Transao11
Transao
Transao22
W
Momento 1
UPDATE na Tabela
Tab_X
EXCLUSIVE
LOCK
Momento 1
I
T
Momento 2
Executa UPDATE
Momento 3
Commit / Rollback
Momento 2
Wait
Momento 3
Executa o Select
UPDATE LOCK - X
o Preveno de DeadLocks;
o Um Update consiste em uma transao que l os
dados (portanto coloca nesses dados um Shared
Lock(S)) e em seguida modifica-os (colocando
sobre ele o Exclusive Lock (X)). Voc pode notar
que ocorre uma converso de lock de Shared em
Exclusive.
o O SQl Server resolve problema de DeadLock,
desfazendo uma das transaes para que a outra
prossiga, envia uma mensagem para a transao
desfeita, informando do deadlock, que ela foi
desfeita e avisa o usurio para reexecutar seu 9
processamento.
UPDATE LOCK - U
o Apenas Uma tabela pode lanar um UPDATE Lock
sobre determinada coluna;
o UPDATE Lock seguido de um EXCLUSIVE
Lock (Caso as modificaes precisem ser feitas) os
dados so atualizados, e o Lock desfeito, assim, se
duas transaes tentam fazer ambas uma atualizao a
primeira que lanar o UPDATE Lock em seguida
lana um Exclusive Lock, a segunda espera a operao
de Exclusive Lock e s depois pode entrar em
execuo
10
INTENT LOCK - I
o Indica a inteno de futuramente o SQL Server
colocar Locks em determinado conjunto de dados
para uma determinada transao.
o Os Locks exclusivos so enfileirados, O lock de
inteno impede que outras transaes coloquem
exclusive lock nesses dados.
o Existem trs tipos
Shared Intent Lock (IS)
Exclusive Intent Lock (ix)
Shared com Intent Exclusive Lock (SIX)
11
INTENT LOCK - I
Shared Intent Lock(IS)
O Lock IS indica que a transao ir ler alguns(mas no todos)
dados na tabela Colocando Shared Locks
BULK UPDATE - BU
o Lock de alterao de volume;
o Usado durante uma cpia de grande volume de
dados de uma tabela para outra, ou quando o usurio
utilizar a opo TABLOCK;
o Melhora a performance enquanto uma cpia do tipo
bulk feita;
o De fato ele diminue a concorrencia a tabela de
destino, desabilitando o acesso tanto de leitura quanto
de escrita a tabela.;
13
Nvel do Lock
RID
a.
O SQL Server
bloqueia
automaticamente as
linhas individuais.
b.
O usurio pode
colocar lock na linha
com a opo
ROWLOCK.
KEY
PAGE
a.
O SQL Server.
b.
O usurio
(PAGLOCK)
15
Nvel do Lock
ENTENT
TABLE
a.
O SQL Server
b.
ESQUEMA
DB
Database.
Granularidade
Durao do Lock
ROWLOCK
Lock de linha
PAGLOCK
Lock de pgina
TABLOCK
Lock de tabela
TABLOCKX
17
Granularidade
Tempo de durao
HOLDLOCK
Lock de Update
UPDLOCK
Lock de Update
NOLOCK
No bloqueia os dados.
Apenas consegue ler dados
que esto bloqueados de
forma exclusiva em
processo de alterao.
READPAST
Tipo de Lock
Tempo de durao
READ COMMITED
READ UNCOMMITED
Equivale ao NOLOCK.(leitura
suja).
REPEATABLEREAD
SERIALIZABLE
Dura at o final da
transao.
19
UPDLOCK
o Se voc quiser, pode colocar, com o comando SELECT, o
lock de update em uma tabela, para garantir que outras
transaes possam ler os dados, mas s a sua transao possa
alter-los. Observe o exemplo a seguir:
20
UPDLOCK
Transao 1
Transao 2
Momento 1
Momento 2
BEGIN TRANSACTION
BEGIN TRANSACTION
WITH (UPDLOCK)
WHERE Cod_Func = 1
WHERE Cod_Func = 1
Hint
UPDATE Funcionario
--Wait
Momento 4
SELECT *
--Wait
FROM Funcionario
WHERE Cod_Func = 1
21
NOLOCK
Permite que o SELECT leia dados que estejam em
processo de alterao pela primeira transao. Veja o
exemplo seguinte:
Transao 1
Transao 2
Momento 1
Momento 2
BEGIN TRANSACTION
BEGIN TRANSACTION
UPDATE Funcionario
WITH (NOLOCK)
WHERE Cod_Func = 1
WHERE Cod_Func = 1
UPDATE Funcionario
--Wait
22
READPAST
Le os dados da tabela pulando os dados
bloqueados, melhor que deixar a transao bloqueada
enquanto aguarda a primeira terminar seu processamento
Veja o exemplo a seguir:
Transao 1
Transao 2
Momento 1
Momento 2
BEGIN TRANSACTION
BEGIN TRANSACTION
UPDATE Funcionario
WITH (READPAST)
WHERE Cod_Func = 1
WHERE Cod_Func = 1
UPDATE Funcionario
--Wait
Lock de sesso
(Nvel de Isolamento de Transaes)
o Dependendo da situao, voc pode optar pelo lock de
sesso para as suas transaes.
READ COMMITED DEFAULT
READ UNCOMMITED NOLOCK(table)
SERIALIZABLE HOLDLOCK(table)
REPEATABLE READ
24
Sem lock
Transao 1
Transao 2
Momento 1
Momento 2
BEGIN TRANSACTION
SELECT * FROM Funcionario
Transao 2
Momento 1
Momento 2
--Wait
BEGIN TRANSACTION
SELECT * FROM Funcionario
SELECT * FROM Funcionario
26
Sem lock
Transao 1
Transao 2
Momento 1
Momento 2
BEGIN TRANSACTION
UPDATE Funcionario
SET Sal_Func = Sal_Func * 1.1
27
Lock SERIALIZABLE
Transao 1
Transao 2
Momento 1
Momento 2
/*WAIT */
BEGIN TRANSACTION
UPDATE Funcionario
SET Sal_Func = Sal_Func * 1.1
SELECT * FROM Funcionario
/* SELECT sem fantasma */
28
DEAD LOCK
o Um Dead Lock provocado pelo prprio SQL Server quando
ocorrer uma situao de inanio. Esta situao acontece quando
duas ou mais transaes aguardam infinitamente por um recurso.
Observe:
29
DEAD LOCK
Transao 1
Transao 2
Momento 1
Momento 1
BEGIN TRANSACTION
BEGIN TRANSACTION
SELECT *
SELECT *
FROM Funcionario WITH
(HOLDLOCK)
(HOLDLOCK)
MOMENTO 2
Este Update ficaria aguardando a
segunda transao terminar.
MOMENTO 2
Este Update ficaria aguardando a
segunda transao terminar.
31