SOLUÇÃO DO DESAFIO DO GORDO – Arquivo de log gigante

E ai galera, tudo bem com vocês?

Antes de mais nada quero agradecer à todos que participaram desse primeiro DESAFIO DO GORDO de 2014.

“Orra tio, para de ficar enrolando e responde logo esse desafio meu.”

Antes de resolvermos o desafio, é interessante conhecer qual a função do arquivo de transaction log e como o mesmo é utilizado pelo SQL Server.

O arquivo de transaction log é responsável por armazenar todas as transações (implícitas ou explícitas) que ocorrem em um banco de dados, garantindo assim que as transações finalizadas com sucesso (COMMIT) sejam aplicadas no arquivo de dados e as transações finalizadas com erros sejam desfeitas (ROLLBACK).

Para garantir a integridade do banco de dados, toda as transações são mantidas no arquivo de transaction log até que as mesmas não sejam mais necessárias.

Todos os bancos de dados SQL Server possuem uma propriedade chamada Recovery Model, que define quais e por quanto tempo as transações serão mantidas no arquivo de transaction log.

Caso o banco de dados esteja utilizando o recovery model Full, TODAS as transações são gravadas no arquivo de transaction log e só serão desnecessárias quando o processo que executa a “limpeza” do arquivo de transaction log for executado.

Caso o banco de dados esteja utilizando o recovery model Simple, TODAS as transações são gravadas no arquivo de transaction log, porém assim que o processo de CHECKPOINT ocorre, automaticamente também é realizado o processo de “limpeza” do arquivo de transaction log.

Além do recovery model Full e Simple também temos o Bulk-Logged que é muito utilizado para acelerar processos de carga em massa (BULK INSERT), pois todas as transações realizadas dentro do processo de carga em massa NÃO SÃO gravadas no arquivo de transaction log, diminuindo assim a quantidade de I/O utilizada.

Qualquer transação que seja realizada fora do processo de carga em massa é gravada normalmente no arquivo de transaction log e armazenada até que o processo de “limpeza” ocorra.

“Tio e qual é o nome desse esquema que limpa ai mano????

O processo responsável por “limpar” o arquivo de transaction log é chamado de TRUNCATE.

“Haaaaaaaaaaaaaaaaa tio. Agora entendi o esquema. Esse truncate ai é igual a minha Creusinha, hehehehe. É ela quem lava a minha camisa do curintia e também minha cueca da sorte. Essa mina é de ôro.”

…………………(Silêncio Constrangedor)

Com certeza vocês devem estar com aquela dúvida na cabeça, e como é que executamos o processo de TRUNCATE para realizar a “limpeza” dos arquivos de transaction log quando o banco de dados estiver com recovery model Full ou Bulk Logged?

À partir do SQL Server 2008, a única forma de executar o processo de TRUNCATE é através do backup dos arquivos de transaction log.

Após discutirmos essas particularidades do SQL Server, fica mais fácil identificar que o motivo pelo qual o arquivo de transaction log está 8x maior do que o arquivo de dados é devido à não execução de uma rotina de backup dos arquivos de transaction log e para solucionar esse problema basta criar um plano de manutenção que execute essa rotina de backup.

Caso o seu ambiente não seja crítico e não haja a necessidade de uma rotina de backup dos arquivos de transaction log, basta alterar a propriedade recovery model para SIMPLE, conforme o script:

ALTER DATABASE [NOMEBANCODADOS] SET RECOVERY SIMPLE;

É importante ressaltar que o processo de TRUNCATE não diminuirá o tamanho do arquivo de transaction log, sendo que para isso será necessária a execução do processo de SHRINK, através do script:

DBCC SHRINKFILE (‘NOMEARQUIVOLOG’ , 0, TRUNCATEONLY);

Espero que tenham gostado do desafio e não deixe de fazer sua inscrição no blog para receber todas os novos posts.

Grande abraço.

Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: