Niveis de Isolamento – MySQL

Ola pessoal,

Daremos continuidade ao assunto de transação, porém agora falando dos níveis de isolamento e os possíveis problemas.

O padrão SQL define quatro níveis de isolamento de transação, com o intuito de evitar três fenomenos indesejados em transações simultaneas. Assumimos que um ambiente de produção pode ter várias transações simultâneas, no mínimo uma por sessão.

Com isso, é possível que ocorra a:

– 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 nesta campo e ve o valor modificado pela transação “A” sem ter o commit efetuado, essa é uma leitura suja.

Isso é um problema em ambientes de tomada de decisão, Relatórios entre outros, pois caso a transação “A” sofra um Rollback, a transação “B” não saberá disso e ja tera informado o valor “erroneo”.

Leitura não repetitiva: Ocorre quando um select(leitura) reproduz resultados diferentes quando ela é repetida posteriormente na mesma transação.

Exemplo: A transação “A” le o valor de um campo. Se outra transação “B” atualizar este valor e commita-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.

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.
Continue lendo

Transações no MySQL

Ola pessoal,

Falaremos agora sobre transações, para então dar continuidade a outro assunto que é importante, os níveis de isolamento.

Primeiramente, 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.

Ou seja, se todas as instruções foram concluidas sem erros, você poderá registrar estas em definitivo no banco de dados. Porém caso ocorra algum erro, você poderá retornar a um ponto de salvamento ou efetuar um rollback, cancelando a alteração.

Um exemplo simples via SQL:

Continue lendo

Modelo ACID SQL

Boa noite, pesooooal!

Fui surpreendido em um teste ao cair uma questão referenciando este tema, ACID, e após algumas pesquisas fiquei mais surpreso por ser um tema importante, e por isso não deve ser deixado de lado.

Afinal, do que estou falando?

ACID é do acrônimo de Atomicidade, Consistência, Isolamento e Durabilidade. Ok, até ai sabemos a descrição da sigla, mas no que isto influi?

Ele é um conceito utilizado em ciências da computação para caracterizar uma transação em banco de dados e outras coisas.

Partindo a cada propriedade, segue abaixo as suas caracteristicas:

– Atomacidade: É o que trata a transação efetuada, tendo reflexo nos dados apenas se efetuada com sucesso. Com base neste assunto, este se refere que qualquer reflexo no banco deve surgir após a conclusão de uma transação sem erros.

Explicando melhor, caso a transação tenha sido efetuada com sucesso, o valor será alterado/incluso na base de uma forma correta. Caso ocorra algum erro e a mesma tenha sido abortada, a base não deve receber esta alteração pela metade, meio obvio até porque hoje só é possível se basear ou tirar uma conclusão concreta em fatos reais, e não incompletos.
Continue lendo

O que é o Full Table Scan ?

Boa noite pessoal.

Em diversas situações diárias, seja em casos específicos ou em testes online, me deparei com este conceito e fiz a mesma pergunta que pintou pra você agora.. O que é isso?

Pelo termo já é possível imaginar o seu significado, mas vamos aos fatos.

– Full Table Scan: Uma consulta que trabalha com uma leitura sequencial, bloco a bloco por toda a tabela especificada. Neste são verificados todos os registros com os critérios de seleção (cláusula Where).

Confuso? Vamos a um exemplo.

Suponha que você foi a uma locadora para alugar um filme de terror (Crepúsculo). Uma vez que os filmes são organizados por categorias e não por ordem alfabética, você deve procurar o mesmo nesta sessão.
Continue lendo

Conexões ativas SQL Server

Boa tarde Pessoal!

Neste post, disponibilizo uma query que me ajuda diariamente a detectar conexões em sleeping a uma base SQL Server, onde esta pode estar ‘lockando’ alterações em tabelas, ou no próprio acesso a database:

select * from sys.sysprocesses

A query em questão traz toda a relação das conexões ativas aos logins na instância. Também é possível trazer a relação de um login especifico, junto a data mais antiga de conexão:
Continue lendo

Mais sobre SQL e o Modelo Relacional

Já com uma base de conhecimento, podemos definir que o SQL é um conjunto de comandos utilizado para manipulação de dados em uma base e o gerenciamento do mesmo, seja para incluir, modificar ou remover dados.

O modelo de banco relacional possui apenas um tipo de estrutura, que é a tabela, onde por sua vez é formada por linhas (registros) e colunas (campos) e que também pode ser criada através através da junção ou combinação de outras tabelas.

É interessante ressaltar que o SQL não é PROCEDURAL, logo você define como e onde o processo deve ser feito, sem seguir uma rotina padrão para chegar ao resultado final. Desta forma, você pode alterar apenas um conjunto especifico de registros, sem tem que passar por todos os outros existentes.
Continue lendo

Conceito de SQL e Banco de Dados

Afinal, o que é SQL?

Structured Query Language ou SQL propriamente dito, é a linguagem padrão de banco de dados no modelo relacional.

WTF? Vamos por partes, afinal, o que é um banco de dados?

Existem diversas definições sobre banco de dados, porém todas chegam a mesma conclusão. No meu conceito, banco de dados é um conjunto de dados onde o seu objetivo é gerar a informação seja ao administrador ou ao usuário final.

Mas porque não um conjunto de informações? Pense da seguinte forma, ao realizar o cadastro de clientes em uma loja, você precisa saber a idade do mesmo, como você iria solicitar isso?
Continue lendo