Sie sind auf Seite 1von 62

ACID

Conceito utilizado em ciência da computação para caracterizar uma


transação.

União das iniciais de:


Atomicidade
Consistência
Isolamento
Durabilidade

Obs.: Todo Sistema Gerenciador de Banco de Dados aplica os conceitos de


ACID. Caso isto não ocorra ele não pode ser considerado um SGBD. 1
ACID
Atomicidade

Na transação ou se faz tudo, ou nada, sem meio termo.

Em uma transação podemos ter mais de uma operação.

2
ACID
Atomicidade

Exemplo:
Em uma transação realizamos
• Inclusão de um cliente novo
• Geração de uma nota fiscal
• Baixa no estoque do produto vendido

Ao final, devemos confirmar a transação por inteiro e gravar todas estas


operações, se esta transação não se confirmar ao final, nenhuma destas
operações pode ser gravada no banco de dados, garantindo assim a
atomicidade da transação".
3
ACID
Consistência

Garantir que o banco de dados antes da transação esteja


consistente e, que após a transação o banco permaneça
consistente, sem problemas de integridade.

Podemos contribuir com o trabalho do banco de dados, criando


mecanismos que evitem problemas de integridade no banco.

4
ACID
Consistência

Exemplo:

O cliente de um banco possui um saldo de R$ 50,00


O cliente não tem limite de crédito (não pode ficar negativo)

Se a transação for uma retirada de R$ 60.00, ela não pode ser


concluída pois a consistência do banco de dados não estaria
garantida deixando a conta com um saldo negativo.

5
ACID
Isolamento

Garantir que nenhuma transação seja interferida por outra até que
ela seja completada.

Existem transações que podem ocorrer de forma simultânea sob


os mesmos dados, como por exemplo consultas.

6
ACID
Isolamento

Exemplo:

Duas transações são iniciadas


Ambas estão ligadas diretamente ao mesmo registro no banco de
dados
A primeira atualizando
A segunda consultando

O isolamento nos garantirá que a transação de consulta somente


será executada após a transação de atualização ser completada.
7
ACID
Isolamento

Exemplo:

No ato de consultas, podemos imaginar um sistema de vendas,


em que o mesmo produto pode ser consultado várias vezes ao
mesmo tempo, visando saber o valor deste.

8
ACID
Durabilidade

Garante que a informação gravada no banco de dados dure de


forma imutável até que alguma outra transação de atualização, ou
exclusão afete-a.

Garante que os dados não sejam corrompidos, ou seja,


desapareçam ou se modifiquem sem motivo aparente.

9
Transações

Uma transação é um meio de executar uma ou mais instruções


SQL com uma única unidade de trabalho, onde todas ou nenhuma
das instruções são bem sucedidas.

Se todas as instruções foram concluídas sem erros, você poderá


registrar estas em definitivo no banco de dados.

Caso ocorra algum erro, você poderá retornar a um ponto de


salvamento (savepoint) ou efetuar um rollback, cancelando a
alteração. 10
Transações

Exemplo:
START TRANSACTION;
SELECT @A:=SUM(salario)
FROM funcionarios
WHERE cargo=‘Programador’;
UPDATE resumo
SET somatorio=@A
WHERE cargo=‘Programador’;
COMMIT; 11
Transações

No MySQL, apenas o InnoDB suportará transações em nível


ACID.
Estas opções não são validas ou não tem o efeito esperado em
outros Engines.

12
Transações

13
Transações
Principais instruções
Start Transaction (ou BEGIN):

Inicia explicitamente uma nova transação, mantendo ela aberta


até que seja fechada (concluída) por um COMMIT ou ROLLBACK.

14
Transações
Principais instruções
SavePoint:

Um ponto delimitado na transação, que oferece a possibilidade de


um rollback de qualquer comando executado após este ponto
salvo.

Atenção: Ao efetuar um novo savepoint com o mesmo nome, o


antigo será sobreescrito pelo novo criado.

15
Transações
Principais instruções
Rollback to Savepoint

Efetua o rollback da transação até o ponto criado.

Este ponto continuará a existir mesmo após o rollback, permitindo


que ele seja reutilizado.

16
Transações
Principais instruções
Rollback

Cancela todas as alterações efetuadas na transação.

17
Transações
Principais instruções
Commit

Torma permanente as alterações tratadas na transação ao banco


de dados.

18
Transações
Principais instruções
AUTOCOMMIT

É ativado por padrão, logo o MySQL confirma implicitamente cada


instrução como uma transação.

Uma vez desativado, será possível manusear cada transação,


porém fica a critério do DBA.

19
Transações
Principais instruções
AUTOCOMMIT

Para desativar o autocommit:


set session autocommit=0;
set autocommit=0;

20
Transações
Principais instruções
AUTOCOMMIT

Para verificar a configuração através do SELECT:


SELECT @@autocommit;

21
Transações
Principais instruções
AUTOCOMMIT

Obs.: A partir da versão 5.5.8 do MySQL, é possível definir o


autocommit = 0 de forma global na seção do [mysqld] no arquivo
de configuração (my.cnf).

[mysqld]
autocommit = 0

22
Níveis de Isolamento

O padrão SQL define quatro níveis de isolamento de transação:


• Read uncommitted
• Read committed
• Repeatable read
• Serializable
Para evitar três fenômenos entre transações simultâneas:
• dirty read (leitura suja)
• nonrepeatable read (leitura que não pode ser repetida)
• phantom read (leitura fantasma) 23
Níveis de Isolamento - Fenômenos

Dirty read (leitura suja)

Suponhamos que a transação “A” modifique algum campo da


tabela, porém que ainda não o tenha “commitado”.

Se uma transação “B” efetua um SELECT neste campo e vê o


valor modificado pela transação “A” sem ter o commit efetuado,
essa é uma leitura suja.

24
Níveis de Isolamento - Fenômenos

Dirty read (leitura suja)

Isso é um problema em ambientes de tomada de decisão,


Relatórios entre outros.

Caso a transação “A” sofra um Rollback, a transação “B” não


saberá disso e já terá informado o valor “errôneo”.

25
Níveis de Isolamento - Fenômenos

dirty read
(leitura suja)

26
Níveis de Isolamento - Fenômenos

Nonrepeatable read (leitura que não pode ser repetida)


Ocorre quando um SELECT(leitura) reproduz resultados
diferentes quando ela é repetida posteriormente na mesma
transação.

27
Níveis de Isolamento - Fenômenos

Nonrepeatable read (leitura que não pode ser repetida)


Exemplo:
A transação “A” lê o valor de um campo.
Outra transação “B” pode atualizar este valor e “commitá-lo” no
banco.
Caso a transação “A” volte a consultar o mesmo campo, ela trará
o valor “comitado” pela transação “B”, ou seja, trata valores
diferentes do mesmo campo na mesma transação executada.
28
Níveis de Isolamento – Fenômenos

Nonrepeatable read (leitura que não pode ser repetida)


Isso é grave caso você opte por alterar algum registro com a
condição de um campo x, onde ele pode assumir um valor y em
seguida.

29
Níveis de Isolamento – Fenômenos

Nonrepeatable read (leitura que não pode ser repetida)

30
Níveis de Isolamento - Fenômenos

Phantom read (leitura fantasma)

Uma transação “A” pode ler um conjunto de linhas de uma tabela com base
em alguma condição WHERE SQL.

Suponhamos que a transação “B” insira uma nova linha que também
satisfaz a clausula WHERE na tabela utilizada pela transação A.

Se a transação “A” for repetida ela verá um fantasma, ou seja, uma linha
que não existia na primeira leitura utilizando a clausula WHERE.
31
Níveis de Isolamento - Fenômenos

Phantom read
(leitura fantasma)

32
Níveis de Isolamento

Repeatable Read
Este nível garante que a mesma leitura de um dado através do
SELECT se repita, tendo o mesmo resultado para diferentes
execuções na mesma transação.

Se neste nível a leitura não fosse repetida, ela estaria aberta a


leitura fantasma, que acontece entre um SELECT e caso ocorra
uma atualização nos dados neste espaço de tempo.

33
Níveis de Isolamento

Repeatable Read
É possível acontecer a leitura fantasma com este nível de
bloqueio utilizando o Engine InnoDB.

O Repeatable Read é o nível de Isolamento Default do MySQL.

34
Níveis de Isolamento

Read Commited

Permite que a transação leia manipule os dados já “commitados“


por outras transações.

Caso alguma transação tenha alterado algum dado porém sem


efetuar um commit, estes não serão vistos.

Com este nível de isolamento, você evita as leituras sujas, porém


esta aberto para as leituras fantasmas e a Leitura não repetitiva.35
Níveis de Isolamento

Read Uncommited

Este nível permite que uma transação possa ver e manipular


valores não “commitados” por outras transações, ficando aberto
para leituras sujas e Leitura não repetitiva, facilitando também
casos de Leituras fantasmas.

36
Níveis de Isolamento

Serializable

Semelhante ao Repeatable Read, porém com a restrição adicional


de que as linhas selecionadas por uma transação não podem ser
alteradas ou lidas por outra transação, até que a primeira
transação seja concluída.

Este nível isola completamente uma transação da outra, onde a


segunda transação aguarda a finalização da primeira, e assim por
diante “uma de cada vez”, evitando os fenômenos indesejados. 37
Níveis de Isolamento

Por default o MySQL trabalha com o nível de isolamento


Repeatable Read, sendo possível a sua alteração.

38
Níveis de Isolamento

Para consultar o nível atual na instância:


mysql> SHOW variables LIKE '%isolation%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+

mysql> SELECT @@tx_isolation;


+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+ 39
Níveis de Isolamento

Para alterar o nível de isolamento na instância, você pode usar a


opção –transaction-isolation com o comando mysqld, ou
alterar diretamente no my.cnf:

[mysqld]
transaction-isolation = 'isolation_level'

40
Níveis de Isolamento

Tabela com níveis de isolamento da transação no SQL

Nível de isolamento Dirty Read Nonrepeatable Read Phantom Read


Read uncommitted Possível Possível Possível
Read committed Impossível Possível Possível
Repeatable read Impossível Impossível Possível
Serializable Impossível Impossível Impossível

Fonte: http://sqlparatodos.com.br/niveis-de-isolamento-mysql/
41
Storage Engines / motores
Mecanismos de Armazenamento
Principais características, recursos ou funcionalidades inerentes
aos storage engines:
• Capacidade Transacional
• Meio de armazenamento
• Índices
• Integridade Referencial
• Tipo de travamento
• BOL – Backup On-Line
• Auto Recovery 42
Storage Engines / motores
Mecanismos de Armazenamento
Capacidade Transacional
Capacidade da tabela aceitar múltiplos acessos (de múltiplos
usuários / aplicações), com colisão e travamento mínimos, sem
que um usuário interfira com a operação do outro.
É poder executar comandos em blocos (transação), ao invés de
executar um comando SQL por vez.
É estar de acordo com o modelo ACID (Atômico, Consistente,
Isolado e Durável). 43
Storage Engines / motores
Mecanismos de Armazenamento
Meio de armazenamento
No MySQL/MariaDB, dependendo do motor escolhido, pode-se
gravar a tabela 100% em memória (nada no disco)
Em vários outros bancos de dados, toda tabela grava e lê os
dados de uma única forma padrão.
Pode-se gravar dados em uma TABLESPACE, como no Oracle,
por exemplo.
44
Storage Engines / motores
Mecanismos de Armazenamento
Meio de armazenamento
Pode-se se utilizar uma tecnologia dos anos 70, extramente
rápida, conhecida como ISAM, para gravar dados e recuperá-los
(leitura) de forma muito rápida.

Outro tipo de motor pode gravar os dados de forma compactada,


como em um arquivo ZIP, economizando muito espaço em disco.

45
Storage Engines / motores
Mecanismos de Armazenamento
Meio de armazenamento
Ainda, pode-se gravar em formato CSV que facilita muito a
integração com equipamentos de rede e telefonia, por exemplo.

Ao invés de ler e gravar os dados no servidor onde o


MySQL/MariaDB está instalado, pode-se espalhar os dados por
vários computadores para se criar um cluster de alta
disponibilidade e alta performance.

46
Storage Engines / motores
Mecanismos de Armazenamento
Índices

Dependendo do motor, temos índices do tipo B-TREE, B+TREE,


RTREE (spatial), ou FULL TEXT (que indexa palavras ao invés da
coluna ou campo inteiro, e permite buscas como fazemos no
Google, digitando palavras fora de ordem).

47
Storage Engines / motores
Mecanismos de Armazenamento
Integridade Referencial
FK (foreign key).
Há motores que usam, e, motores que não usam.
Dependendo da aplicação ou finalidade da tabela isto não é
necessário.
É uma funcionalidade que pesa para o banco de dados.
Às vezes, não ter este recurso pode ser uma vantagem em termos
de velocidade. 48
Storage Engines / motores
Mecanismos de Armazenamento
Tipo de travamento

Capacidade de poder travar um único registro (linha), vários


registros ou a tabela inteira.

Cada motor tem um ou mais tipo de travamentos à disposição da


tabela.

49
Storage Engines / motores
Mecanismos de Armazenamento
BOL – Backup On-Line
Fazer backup on line (com todo mundo trabalhando, sem precisar
parar o banco).
Tem um custo alto.
Se a sua aplicação não roda H24 (24 horas por dia), significa que
você tem janela de backup. Talvez seja interessante abrir mão
deste recurso para ter mais agilidade nas leituras e escritas.
50
Storage Engines / motores
Mecanismos de Armazenamento
Auto Recovery

Há motores que caso haja uma corrupção de índice, por exemplo,


você se verá obrigado a indisponibilizar o banco para rodar um
comando básico de REPAIR TABLE.

Há outros, no entanto, que no máximo você será avisado, através


do log de erro, que o MySQL/MariaDB server encontrou uma
inconsistência e, já consertou.
51
Storage Engines / motores
Mecanismos de Armazenamento
Storage engine É uma característica única e exclusiva do
MySQL/MariaDB que permite escolher um conjunto de recursos
pré-definidos que melhor atenda aos requisitos e às necessidades
de sua tabela, respeitando, o hardware disponível.

É muito mais do que, simplesmente, tipo de tabela


Fonte: http://www.alexandremalmeida.com.br/2011/06/17/o-que-e-storage-engine-parte-1/

52
Mecanismos de Armazenamento
e Tipos de Tabelas no MySQL

O MySQL possui uma característica um pouco diferente dos


outros SGBDs, uma vez que no MySQL é possível escolher o tipo
da tabela no momento da criação da mesma.

O formato de armazenamento dos dados, bem como alguns


recursos do banco de dados são dependentes do tipo de tabela
escolhido.

53
Mecanismos de Armazenamento
suportados pelo MySQL

InnoDB

É um mecanismo de armazenamento transacional seguro


(compatível com ACID).

Possuí rollback e commit de transações, como também


recuperação de desastres para proteger os dados do usuário.

54
Mecanismos de Armazenamento
suportados pelo MySQL

InnoDB

Efetua bloqueio em nível de linha (sem escalação de bloqueios de


granularidades maiores) e controle de concorrência multi-usuário.

Para manter a integridade referencial dos dados, o InnoDB


suporta chaves estrangeiras (Foreign Key) mantendo as restrições
referenciadas nos dados armazenados.

É o motor de armazenamento padrão do MySQL a partir da versão 5.5.5 55


Mecanismos de Armazenamento
suportados pelo MySQL

MyISAM

É um dos mecanismos de armazenamento do MySQL mais


utilizado na Web e para armazenamento de dados históricos (data
warehousing).

O MyISAM é suportado em todas as versões do MySQL

Era o motor de armazenamento padrão do MySQL até a versão "5.5.5"


56
Mecanismos de Armazenamento
suportados pelo MySQL

Merge

Permite agrupar logicamente uma série de tabelas MyISAM


idênticas e referencia-las como um objeto.

Prática usada em bancos de dados com grandes volumes de


dados.

57
Mecanismos de Armazenamento
suportados pelo MySQL

Archive

É um mecanismo de armazenamento que fornece a solução ideal


para armazenar e recuperar grandes quantidades de dados
historicamente referenciados , arquivando informações de
auditoria e de segurança.

58
Mecanismos de Armazenamento
suportados pelo MySQL

Federated

É um mecanismo de armazenamento que oferece a capacidade


de vincular servidores MySQL separados para criar um banco de
dados lógico em vários servidores físicos.

Opção boa para implementar em ambientes distribuídos ou data


marts.

59
Mecanismos de Armazenamento
suportados pelo MySQL

CSV

É um mecanismo de armazenamento de dados em arquivos texto


utilizando um separador comum para formatar os valores nele
armazenado.

Pode-se utilizar o motor CSV facilmente para efetuar troca de


dados entre aplicações que exportam e importam dados no
formato CSV.
60
Mecanismos de Armazenamento
suportados pelo MySQL

Não se está restrito a utilizar apenas um mecanismo de


armazenamento.

Pode-se utilizar um mecanismo por tabela, esquema ou banco de


dados.

61
Mecanismos de Armazenamento
suportados pelo MySQL

Exemplo:
mysql> CREATE TABLE teste1
-> ( t1 varchar(10)
-> ) engine=innodb;

mysql> CREATE TABLE teste2


-> ( t2 varchar(10)
-> ) engine=myisam;

mysql> SHOW TABLES;


+------------------+
| Tables_in_teste |
+------------------+
| teste1 |
| teste2 | 62

Das könnte Ihnen auch gefallen