Lock. Administração de Banco de Dados

Documentos relacionados
Banco de Dados I 6 Transações e Controle de Concorrência

GBC043 - Sistemas de Banco de Dados Lab8 : Transações no PostgreSql

CONCORRÊNCIA. Buscando aumentar os níveis de concorrência redução da espera em detrimento do isolamento, a SQL definiu alguns níveis de isolamento.

BDII SQL TRANSAÇÃO Revisão 2

Controle de Transação

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP

Lista de Exercícios 12 Transações

Orientações. Transações - PostgreSQL. Relembrando: Propriedades desejáveis. Abrir Prompt de comando ROLLBACK

Banco de Dados II. Transações (Oracle) Segurança: Introdução; Controle de Acesso; Criptografia; Recursos de SQL.

Controle de Transações. Banco de Dados André Luiz do Vale Soares

CONCORRÊNCIA. 1. Introdução. Recursos exclusivos. Não necessita controle. Abundância de recursos compartilhados. Controle necessário mas mínimo

Criando Transações. Prof. Fernanda Baião. TbEstoqueLivros. TbEstoqueLivros. ID IDLoja IDLivro Estoque

Aula 03. Evandro Deliberal

Sumário. Introdução a Transações

Oracle Comandos para Processamento de Transações

revisão Controle de Concorrência com Locks Bancos de Dados I 2015/02

Processamento de Transações

Conceitos. Gestão de Transacções. Transacção. Conceitos e Propriedades. Controlo de Concorrência. Recuperação. Transacções no SGBD Oracle

BANCO DE DADOS 2 TRANSAÇÃO

Administração de Banco de Dados

A U L A 1 0 C R I A N D O V I E W S V I E W S ( V I S Õ E S )

Administração e Optimização de BDs

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 21. Escola Politécnica da Universidade de São Paulo

Banco de Dados. Prof. Antonio

José Antônio da Cunha

Adriano Maranhão TRANSAÇÕES

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Capítulo 9: Sistemas de banco de dados

BD II (SI 587) Transações em Banco de Dados. Prof. Josenildo Silva

Bases de Dados 2013/2014 Controlo de Concorrência

Contato. professorluisleite.wordpress.com

SGBD. Funções Básicas de um SGBD

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Triggers(Gatilhos) Tiago Alves de Oliveira

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Exercícios Módulo Banco de Dados I (08/07/2006)

SGBD. Definição. Funções básicas

Controle de Concorrência

Tabelas. Banco de Dados I MySQL

Banco de Dados I Introdução SQL

S U B G R U P O S D M L E D Q L : A L T E R A N D O E A P A G A N D O D A D O S E M U M A T A B E L A

Transacções. Vitor Vaz da Silva

TRANSAÇÕES. Considerando que estes comandos fazem parte de uma TRANSAÇÃO (veremos como indicar isso):

Sistemas Distribuídos Transações

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

TRANSAÇÕES: SISTEMA DE RECUPERAÇÃO E CONTROLE DE CONCORRÊNCIA

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

Banco de Dados. Professora: Luciana Faria

BANCO DE DADOS WEB AULA 12. manipulação de dados atualização e exclusão de registros. professor Luciano Roberto Rocha.

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

MySql. Introdução a MySQL. Andréa Garcia Trindade

Processamento de Transações

Sistemas de Informação e Bases de Dados 2012/2013. Transações. Alberto Sardinha

Linguagem SQL Restrições, Triggers e Views

Processamento de Transações

se a transação falhar entre os 3 passos 4 6, os passos 1 3 ficam sem efeito 4 read(b) Consistência

Administração de Banco de Dados

BD II (SI 587) Controle de Concorrência. Josenildo Silva.

SQL (Tópicos) Structured Query Language

Tutorial SQL Server 2014 Express

Unidade 5 05/11/2008. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet Redes de Computadores

Page 1. Prof. Constantino Jacob

se a transacção falhar entre os passos 4 6, os passos 1 3 ficam sem efeito

Scheduler Baseado em Timestamp

Replicação. Cleide Luzia Bonfim Possamai 03/05/2018

Subsistema de Integridade Semântica

Subsistema de Integridade Semântica


SQL CREATE MATERIALIZED VIEW. Processamento Analítico de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. OLAP: Modelagem Multidimensional

LogMiner Além do FlashBack Query

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Projeto e Administração de Banco de Dados

A linguagem SQL

Sistemas Distribuídos

Linguagem de pesquisa declarativa para banco de dados relacional; 1ª Versão - Desenvolvida pela IBM no laboratório de pesquisa de San José;

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

EXEMPLO DE FLASHBACK VERSIONS QUERY E FLASHBACK TRANSACTION QUERY

Os comandos SQL utilizados nas aulas práticas e mostrados aqui foram feitos num interpretador de comandos: psql

Administração e Optimização de BDs

Sistemas Distribuídos. Ricardo Ribeiro dos Santos

Sistemas de Gerência de Bancos de Dados. 5 - Controle de Concorrência Tópicos Adicionais

Transações Seguras em Bancos de Dados (MySQL)

Cisco CallManager: Manualmente suprimindo dos registros dos destalhes da chamada (CDR) sem a ferramenta de relatório administrativo (ART)

FACULDADE INGÁ Unidade de Ensino Superior Ingá Ltda Ciência da Computação TRIGGERS. Prof. Erinaldo Sanches Nascimento

Bases de Dados 2006/2007 Exame

BCD29008 Banco de dados

A instância Oracle é composta de :

BD II (SI 587) Algoritmos de recuperação Avançado e ARIES. Josenildo Silva.

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

Transcrição:

Lock Administração de Banco de Dados 1

Tópicos o Lock o Tipos de Lock o Recursos que podem ser bloqueados o Dica de Lock sobre uma Tabela o Dica de Lock em uma Sessão o Compatibilidade entre Locks 2

Lock o o Os Locks servem para impedir que os dados de suas tabelas sejam atualizadas por mais de um usuário ao mesmo tempo, o que poderia provocar inconsistência no seu database. Bancos de Dados Relacionais como o SQL Server implementam Locks para que um determinado dado esteja travado enquanto alguem faz uma modificação naquele dado, nenhum usuário poderá modificar os dados que estão sendo modificados por outro usuário 3

Tipos de Lock o Lock Compartilhado (SHARED LOCK X) o Lock Exclusivo (EXCLUSIVE LOCK X) o Lock de Update (UPDATE LOCK U) o Lock de Intenção (INTENT LOCK I) o Lock de Alteração em Volume (BULK UPDATE BU) o Lock de Schema (SCHEMA SCH) 4

SHARED LOCK - X o É o tipo de Lock usado durante o processamento de comandos que não modificam dados, como o SELECT. o O SQL Server permite que um dado possa ser lido por mais de uma cenxão ao mesmo tempo. Enquanto esses dados são recuperados, o SQL Server coloca um lock do tipo compartilhado o que impede que outros atualizem estes dados enquanto estão sendo lidos 5

SHARED LOCK - SH TRANSAÇÃO 1 Momento 1 Select na tabela Tab_x O SQL Server coloca SHARED NOS REGISTROS LIDOS TRANSAÇÃO 2 Momento 1 Select na tabela Tab_x O SQL Server coloca SHARED NOS REGISTROS LIDOS 6

EXCLUSIVE LOCK - X o Bloqueia qualquer acesso inclusive a leitura de um determinado dado que se encontra bloqueado, este é utilizado durante operações de inserção/deleção/atualização de dados; o São grandes causadores de bloqueio do sistema; o Operações que coloquem um Lock exclusivo devem demorar o mínimo possível; 7

EXCLUSIVE LOCK - X Transação 1 Momento 1 UPDATE na Tabela Tab_X Momento 2 Executa UPDATE EXCLUSIVE LOCK Transação 2 Momento 1 Select na Tabela Tab_X Momento 2 Wait W A I T Momento 3 Commit / Rollback Momento 3 Executa o Select 8

UPDATE LOCK - X o Prevenção de DeadLocks; o Um Update consiste em uma transação 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 conversão de lock de Shared em Exclusive. o O SQl Server resolve problema de DeadLock, desfazendo uma das transações para que a outra prossiga, envia uma mensagem para a transação desfeita, informando do deadlock, que ela foi desfeita e avisa o usuário para reexecutar seu 9 processamento.

UPDATE LOCK - U o Apenas Uma tabela pode lançar um UPDATE Lock sobre determinada coluna; o UPDATE Lock é seguido de um EXCLUSIVE Lock (Caso as modificações precisem ser feitas) os dados são atualizados, e o Lock é desfeito, assim, se duas transações tentam fazer ambas uma atualização a primeira que lançar o UPDATE Lock em seguida lança um Exclusive Lock, a segunda espera a operação de Exclusive Lock e só depois pode entrar em execução 10

INTENT LOCK - I o Indica a intenção de futuramente o SQL Server colocar Locks em determinado conjunto de dados para uma determinada transação. o Os Locks exclusivos são enfileirados, O lock de intenção impede que outras transações coloquem exclusive lock nesses dados. o Existem três 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 transação irá ler alguns(mas não todos) dados na tabela Colocando Shared Locks Intent Exclusive Lock(IX) O Lock IX indica que a transação deve modificar alguns (Mas não todos) os dados na tabela colocando Exclusive Locks. Shared With Intent Exclusive Lock(SIX) O Lock SIX indica que a transação deve ler todas as fontes, e modificar algumas (Mas não todas). Isto é executado colocando shared locks nas fontes lidas e exclusive locks nas colunas modificadas. 12

BULK UPDATE - BU o Lock de alteração de volume; o Usado durante uma cópia de grande volume de dados de uma tabela para outra, ou quando o usuário utilizar a opção TABLOCK; o Melhora a performance enquanto uma cópia 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

SCHEMA LOCK - SCH Existem dois tipos de lock de esquema, que são colocados quando se fazem alterações nos esquemas das tabelas: 1. SCH_M Locks Schema Modification são colocados no esquema de uma tabela quando sua estrutura estiver sendo alterada, quando comando de DDL (Definição de dados) são executados. 2. SCH_S Lock Schema Stability indica que a query que está acessando a tabela está sendo compilada. Esse lock não impede exclusive lock (X), mais impede que outras sessões alterem o esquema da tabela bloqueada. 14

Recursos que podem ser bloqueados Nome RID KEY PAGE Nível do Lock Row Identifier. Usado para bloquear uma única linha de dado dentro de uma tabela. É um lock de linha dentro de um índice. Usado para proteger ranges de chaves em transações em série. Bloquear páginas inteiras (8kb). Quem coloca o Lock nos dados a. O SQL Server bloqueia automaticamente as linhas individuais. b. O usuário pode colocar lock na linha com a opção ROWLOCK. O SQL Server bloqueia as linhas dos índices automaticamente. a. O SQL Server. b. O usuário (PAGLOCK) 15

Recursos que podem ser bloqueados Nome do nível do Lock ENTENT TABLE ESQUEMA Nível do Lock É um nome que se dá para um conjunto contíguo de oito páginas (de 8KB cada uma). Uma tabela incluindo todos os dados e índices. Todos os objetos de um usuário. Quem coloca o Lock nos dados O SQL Server bloqueia entents automaticamente. a. O SQL Server b. O usuário pode com as opções TABLOCK e TABLOCKX. Colocada automaticamente pelo SQL Server quando a estrutura de uma tabela estiver sendo modificada. DB Database. SQL Server quando um database estiver sendo restaurado. 16

Otimização com Locks Opção de Lock ROWLOCK PAGLOCK TABLOCK TABLOCKX Granularidade Lock de linha Lock de página Lock de tabela Lock exclusivo de tabela. Duração do Lock Por default, o SQL Server mantém este lock até o final do comando. Por default, o SQL Server mantém este lock até o final do comando. Por default, o SQL Server mantém este lock até o final do comando. Por default, o SQL Server mantém este lock até o final da transação. 17

Otimização com Locks Opção de Lock HOLDLOCK UPDLOCK NOLOCK Granularidade Lock de Update Lock de Update Não bloqueia os dados. Apenas consegue ler dados que estão bloqueados de forma exclusiva em processo de alteração. Tempo de duração Mantém este lock até o final da transação. É equivalente a SERIALIZABLE. Mantém este lock até o final do comando. Só pode ser aplicado no comando SELECT. É chamado lock de leitura suja, pois mostra alteração ainda não confirmada que, portanto, pode ser desfeita. Mantém o lock até o final do comando. READPAST Salta linhas bloqueadas. Esta opção faz com que uma transação salte sobre linhas bloqueadas por outras 18 transação.

Otimização com locks Opção do Lock READ COMMITED Tipo de Lock Exibe apenas dados de tabelas sem lock. Tempo de duração Existe enquanto outro lock for configurado na sessão. É o lock default. READ UNCOMMITED REPEATABLEREAD SERIALIZABLE Equivale ao NOLOCK.(leitura suja). Permite que a 2ª transação leia e insira dados, mas impede que ela altere dados lidos pela 1ª transação. Permite que a 2ª transação apenas leia dados existentes na faixa de dados atingidos pelo lock. (HOLDLOCK) Existe enquanto outro lock for configurado na sessão Dura até o final da transação. Dura até o final da transação. 19

UPDLOCK o Se você quiser, pode colocar, com o comando SELECT, o lock de update em uma tabela, para garantir que outras transações possam ler os dados, mas só a sua transação possa alterá-los. Observe o exemplo a seguir: 20

UPDLOCK Transação 1 Momento 1 BEGIN TRANSACTION SELECT * FROM Funcionario WITH (UPDLOCK) WHERE Cod_Func = 1 Momento 3 UPDATE Funcionario SET Sal_Func = Sal_Func * 1.1 WHERE Cod_Func = 1 Hint Transação 2 Momento 2 BEGIN TRANSACTION SELECT * FROM Funcionario --OK WHERE Cod_Func = 1 UPDATE Funcionario --Wait SET Sal_Func = Sal_Func * 1.1 WHERE Cod_Func = 1 Momento 4 SELECT * --Wait FROM Funcionario WHERE Cod_Func = 1 21

NOLOCK Permite que o SELECT leia dados que estejam em processo de alteração pela primeira transação. Veja o exemplo seguinte: Transação 1 Momento 1 BEGIN TRANSACTION UPDATE Funcionario SET Sal_Func = Sal_Func * 1.1 WHERE Cod_Func = 1 Transação 2 Momento 2 BEGIN TRANSACTION SELECT * FROM Funcionario --OK WITH (NOLOCK) WHERE Cod_Func = 1 UPDATE Funcionario --Wait SET Sal_Func = Sal_Func * 1.1 WHERE Cod_Func = 1 22

READPAST Le os dados da tabela pulando os dados bloqueados, melhor que deixar a transação bloqueada enquanto aguarda a primeira terminar seu processamento Veja o exemplo a seguir: Transação 1 Momento 1 BEGIN TRANSACTION UPDATE Funcionario SET Sal_Func = Sal_Func * 1.1 WHERE Cod_Func = 1 Transação 2 Momento 2 BEGIN TRANSACTION SELECT * FROM Funcionario --OK WITH (READPAST) WHERE Cod_Func = 1 UPDATE Funcionario --Wait SET Sal_Func = Sal_Func * 1.1 WHERE Cod_Func = 1 23

Lock de sessão (Nível de Isolamento de Transações) o Dependendo da situação, você pode optar pelo lock de sessão para as suas transações. READ COMMITED DEFAULT READ UNCOMMITED NOLOCK(table) SERIALIZABLE HOLDLOCK(table) REPEATABLE READ 24

Sem lock Transação 1 Momento 1 BEGIN TRANSACTION SELECT * FROM Funcionario Transação 2 Momento 2 Este comando UPDATE altera os dados da tabela funcionario, fazendo com que o segundo SELECT da primeira transação não devolva os mesmos dados da primeira. UPDATE Funcionario SET Sal_Func = Sal_Func * 1.1 WHERE Cod_Func = 1 SELECT * FROM Funcionario 25

Lock REPEATABLE READ Transação 1 Momento 1 Para garantir que outras transações não interferirão nesta primeira você poderia aplicar o lock de sessão. Transação 2 Momento 2 Este comando UPDATE fica aguardando até que a primeira transação termine. SET TRANSACTION ISOLATION LEVEL REPEATABLE READ BEGIN TRANSACTION SELECT * FROM Funcionario UPDATE Funcionario --Wait SET Sal_Func = Sal_Func * 1.1 WHERE Cod_Func = 1 SELECT * FROM Funcionario 26

Sem lock Transação 1 Momento 1 BEGIN TRANSACTION UPDATE Funcionario SET Sal_Func = Sal_Func * 1.1 Este select apresenta todos os dados afetados pelo update e uma linha a mais inserida pela segunda transação essa linha a mais é chamada linha fantasma. Transação 2 Momento 2 Apesar de o Update da primeira transação bloquear a tabela toda, ainda é possível inserir dados nessa tabela: INSERT Funcionario VALUES (...,5000) SELECT * FROM Funcionario 27

Lock SERIALIZABLE Transação 1 Momento 1 Para evitar os FANTASMAS na sua aplicação, configure este tipo de lock de sessão: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE Este Insert ficará aguardando até que a primeira transação termine. INSERT Funcionario VALUES (...,5000) /*WAIT */ Transação 2 Momento 2 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 próprio SQL Server quando ocorrer uma situação de inanição. Esta situação acontece quando duas ou mais transações aguardam infinitamente por um recurso. Observe: 29

DEAD LOCK BEGIN TRANSACTION SELECT * Transação 1 Momento 1 FROM Funcionario WITH MOMENTO 2 (HOLDLOCK) Este Update ficaria aguardando a segunda transação terminar. BEGIN TRANSACTION SELECT * Transação 2 Momento 1 FROM Funcionario WITH MOMENTO 2 (HOLDLOCK) Este Update ficaria aguardando a segunda transação terminar. UPDATE Funcionario SET Sal_Func = 1000 UPDATE Funcionario SET Sal_Func = 5000 30

Escolher ou não o Lock a ser utilizado? o Sempre que possível, deixe que o SQL Server implemente o lock de acordo com as escolhas do otimizador, porque você pode provocar problemas de contenção, ou seja, você pode bloquear uma tabela por muito tempo e outras transações poderão ficar muito tempo aguardando. 31