844438 - Artigo - Desfragmentao do banco de dados

Transcrição

844438 - Artigo - Desfragmentao do banco de dados
Utilizando Técnicas de Paralelismo e Controle de
Concorrência dos Objetos no Processo de Manutenção
dos Índices, Reindexação e Desfragmentação doBanco
de Dados.
Jean A. Ferreira, Luciano H. Dutra, Jony Melo, Sônia P. Santana, Hélio R.
Soares
Centro Universitário do Triângulo(UNITRI)
Avenida Nicomedes Alves dos Santos, 4545 – Gávea- Caixa Postal 38.411-106
– Uberlândia – MG – Brasil
{jcjeancarlo, lucianodutra, jonytme, sonia.ap.santana}@gmail.com, [email protected]
Resumo. Este artigo sugereuma abordagem prática para o processo
de desfragmentação dos índices de um banco de dados, garantindo a
manutenção com paralelismo e controle de concorrência. Foi
identificado que o processo de reindexação pode apresentar tempo
alto de execução e causar indisponibilidadese bloqueios de registros.
O foco deste trabalho é propor um modelo de desenvolvimento para os
profissionais de banco de dados identificarem os índices fragmentados
e controlar o processo de desfragmentação.Os resultados obtidos
possibilitaram manter os bancos de dados atualizados, desempenho
nas consultas e atualizações de registros, diminuindo a concorrência
de registros durante o trabalho dos usuários do banco de dados.
Abstract.This
article
suggests
a
practical
approach
for
defragmentation process from a database contents, ensuring the
maintenance with parallelism and concurrency control. It was identified
that the process of indexing can spend high execution time and cause
outages and record locks. The focus of this paper is to propose a
development model for professional to database indexes fragmented
identify and control the defragmentation process. The results enabled
to keep the databases updated, query performance and update records
reducing competition records during the work of database users.
1. Introdução
A necessidade da alta disponibilidade dos dados somada ao tempo de espera
nos procedimentos de manutenção dos sistemas de gerenciamento de banco
de dados possibilitaram o desenvolvimento de aplicações voltadas para o
monitoramento e autogerenciamento das rotinas de manutenção de banco de
dados. A empresa QUEST SOFTWARE (2013 A) que desenvolve ferramentas
de Monitoramento e Gerenciamento de Banco de Dados comenta que suas
soluções ajudam a dominar a utilização dos índices, neutralizar a utilização de
índices com baixo desempenho, identificar gargalos e garantir o desempenho
através de visões de gerenciamento de sistema (DMV's), destacam através de
visões a utilização de consultas escritas com códigos com longa duração,
identificam falta de índices úteis, limitam os processos de manutenção de
banco de dados através de uma definição de políticas, oferecem
gerenciamento centralizado através de notificações e relatórios detalhados.
Este artigo propõe uma abordagem prática para o desenvolvimento de
rotinas de desfragmentação de índices de banco dados, promovendo o controle
e gerenciamento do processo de reindexação sem concorrências com
consultas e atualizações dos usuários, dispensando assim ferramentas e
gateways que são comercializados por terceiros.Para tanto, são empregados o
desenvolvimento de scripts na linguagem SQL, na qual são analisadas as
visões do sistema de gerenciamento de banco de dados, atualizações das
estatísticas e agendamentos de execuções dos processos, garantindo
disponibilidade e integridade das bases de dados.
Os objetivos da abordagem proposta são: diminuir o custo de
implementação nos processos de desfragmentação de banco de dados,
utilizando do se de scripts SQL, realizando com flexibilidade, disponibilidade e
garantindo desempenho do banco de dados.
Este trabalho está organizado da forma descrita a seguir. A Seção II
aborda trabalhos e sistemas relacionados, destacando semelhanças e
diferenças entre eles e o que se está propondo. Na Seção III, propõe-se a
abordagem prática de que trata este artigo, detalhando fragmentação e
desfragmentação. Na Seção IV, apresenta-se um exemplo do modelo proposto,
destacando se um exemplo da aplicação real, relatando resultados do uso
desta técnica em uma empresa que necessita de um processo de
desfragmentação de índices efetivo. Por fim, na Seção V, sintetiza se as
sugestões contidas no trabalho, bem como os resultados obtidos, além de
comentar as diretrizes para trabalhos futuros.
2. Sistemas relacionados
A
QUEST
SOFTWARE(2013
A)desenvolveu
soluções
com
denominaçãoSpotlight para diagnosticar e solucionar de forma rápida
problemas de desempenho com banco de dados. As ferramentas possibilitam a
identificação de queda do desempenho com visões de fácil leitura, visualizando
atividades de I/O, utilização de memória, processamento e atividades de
usuários, em tempo real quanto baseado em históricos e também realizam
notificações através de alertas gráficos.
Foi propostapela empresa QUEST SOFTWARE (2013 B) uma solução
para o monitoramento dos recursos utilizados pelos sistemas gerenciadores de
banco de dados. Sua abordagem inovou ao desenvolver um produto de fácil
implantação e entendimento para os profissionais de banco de dados, que
ajuda a identificação de quedas de desempenhos através de uma interface
gráfica. Essa estratégia possibilitou a colaboração do trabalho, visando criar
rotinas automáticas de manutenção e garantindo a disponibilidade do banco de
dados, facilitando a aplicação e análise da execução da desfragmentação de
índice para os profissionais de banco de dados.
A proposta desenvolvida pela empresa IDERA(2013) foi uma solução
denominada SQL DefragManagerversão 3.1. Esta solução possibilitou a
automatização da identificação e desfragmentação dos índices de banco de
dados, através de agendamentos, avaliando os recursos de sistemas,
diminuindo a divisão de páginas de dados no processo de desfragmentação,
centralizando o gerenciamento e provendo o resultado através de relatórios.
A solução da empresa supracitada tem o objetivo de identificar e realizar
o processo de desfragmentação com disponibilidade e eficiência, garantindo
níveis de desempenho, possibilitando os profissionais de banco de dados
avaliarem métricas e automatizar o processo. A proposta deste trabalhoé
abordar a prática de avaliação automática dos dados históricos,realizar o
processo de desfragmentação em paralelo com o processo de identificação de
concorrências dos objetos, colaborar com ação de aborto do processo de
desfragmentação do objeto que está causando indisponibilidade econtinuar o
processo de desfragmentação com o próximo objeto disponível.
3. Reindexação do banco de dados
Projeto de banco de dados físico requer o conhecimento específico do SGBD
que vai ser usado para implementar o banco de dados, na definição, um
analista decide sobre a organização de registros físicos, a organização dos
arquivos de dados, o uso de índices, e assim por diante (HOFFER J., RAMESH
V., TOPI Heik, 2005).
A revista MSDN da Microsoft (2013 A) publicou em 2007o artigo
“HowtocheckFragmentationon SQL Server 2005”, quanto ao desempenho de
um banco de dados, é improvável que um projeto inicial será suficiente para
alcançar o melhor desempenho de processamento para toda vida do banco de
dados. O tempo de consultas, de atualizações bem como armazenamento de
dados precisa ser constantemente monitorado. O projeto de banco de dados
deve ser atualizado frequentemente com objetivo de atender novas exigências
e superar efeitos de degradações no sistema, assim define-se que o banco de
dados deve ser periodicamente reconstruído, reorganizado e reindexado para
recuperar espaços perdidos e corrigir falhas de alocação e fragmentação de
dados. A fragmentação dos índices e dados provoca queda na resposta das
consultas, degradando o desempenho do processamento nas atualizações.
Arquivo indexado é organizado, os registros são armazenados de forma
sequencial ou não sequencial. Para entender a organização é criado um índice
que permite a localização de registros individuais como por exemplo um
catálogo de fichas em uma biblioteca, um índice é uma tabela, cada entrada de
índice corresponde a um valor chave com um ou mais registros. Existem
índices que podem apontar exclusivamente um registro, são conhecidos como
chaves primárias ou candidatas, que identifica uma tupla de registros ou tabela,
também existem índices que podem potencialmente apontar mais de um
registro, chave secundária ou mais conhecidas como chaves estrangeiras,
estes tipos de índices são utilizados para apoiar consultas com recuperação
rápidas de dados ad hoc.
No SQL Server um índice é estruturado semelhante a uma árvore de
cabeça para cima, conhecidas por B-Trees. Os dados são armazenados em
páginas de 8 KB. As páginas possuem uma identificação no cabeçalho da
página e as linhas do índice. As linhas de um índice são compostas de um
valor-chave e um ponteiro para outra página do índice ou para um registro de
dados. Uma página de um índice é definida como nó. O nó primário foi
denominado de nó raiz e o ultimo nível ou camada de nós é definido como nós
folhas. Podem existir diversos níveis intermediários entre o nó raiz e o último
nível da cadeia. A amarração das páginas de cada nível ocorre em forma de
uma lista duplamente encadeada (BATTISTIS, 2005).
A figura 1 foi extraída no site da revista TechNet da Microsoft (2013, D) e
mostra a estrutura de um índice do tipo clustered.
Figura 1: Estrutura de um índice clustered (Microsoft 2013 D).
Os índices são muito eficientes para as operações de busca de registros
nos banco de dados,mas para manter a eficácia desse recurso são necessárias
manutenções que tem objetivo de encontrar índices fragmentados e executar
um processo de desfragmentação.
3.1. Fragmentação
Em geral, o mercado de armazenamento em disco tem crescido e os produtos
estão acompanhando a demanda. No princípio, os primeiros discos eram
grandes, frágeis e tinham limitações de armazenamento. Em resumo, o
armazenamento baseado em disco está ficando mais barato, mais fácil e mais
comum.
Fragmentação é um problema que pode resultar em enumeras
causasdiferentes. Estas causas incluem operação diária com discos,
geralmente podem ser categorizados por: desempenho, backup e restauração,
e estabilidade.
Em fevereiro de 2003,Mike Ruthruffpublicou o artigo que comparava os
comandos DBCC DBREINDEX e DBCC INDEXDEFRAG. O artigo foi
atualizado em março de 2009 no site da revista TechNETMicrosoft (2013, C). A
fragmentação de índices de um banco de dados ocorre devido às inúmeras
operações do tipo DML (linguagem de manipulação de dados) como: inserção,
atualização e exclusão. Quando são realizadas tais operações a ordem lógica
das páginas de dados, baseando-se no valor da chave, torna-se diferente do
valor físico no arquivo de dados. Todas as páginas folhas de um índice
apontam para a próxima e anterior,formando uma lista duplamente ligada de
todas as páginas do índice/dados. Quando a ordem física não corresponde à
ordem lógica, o rendimento do disco é degradado devido ao movimento da
cabeça de leitura do disco, ter que ir para traz e para frente para reunir as
páginas do índice.Consequentemente,
as
consultas
sobre
índices
fragmentados não tem desempenho satisfatório e aumentam as operações de
disco (I/O), salvo em situações em que as páginas estão localizadas no cache
do SQL Server.
3.2. Desfragmentação
Embora os custos para aquisição de equipamentos para armazenamento em
disco estão diminuindo, para muitas empresas os custos para aquisição de
espaço para seus bancos de dados ainda é muito alto e a desfragmentação
não é realizada de forma adequada ocasionando transtornos para as empresa,
porém o processo de desfragmentação deve ser sempre tratada com
prioridade, não só pelos espaços em discos ocupados desnecessariamente,
mas pelos diversos problemas que são desencadeados.
A desfragmentação de um banco de dados deve ser realizada sempre
que os objetos do banco de dados (tabelas e índices) apresentar alarmes de
fragmentação das páginas de dados, para isto deve ser criteriosamente
avaliada a fragmentação e a disponibilidade dos objetos para a execução da
rotina de desfragmentação, com objetivo de evitar impactos ou bloqueios a
leitura e alteração dos objetos de dados. Pois o processo de desfragmentação
em bando de dados com grande volume de informação é muito demorado, de
altíssimo custo e em muitos casos não pode ser realizado a qualquer hora e
também não se consegue executar no tempo esperado. Sabendo disso, criar
planos de manutenção para desfragmentar todos os índices de uma base de
dados pode não ser a melhor alternativa, sendo assim o administrador de
banco de dados deve criar soluções que não cause impactos no ambiente
produtivo.
A fragmentação lógica ocorre nas páginas de índice no SQL Server
quando são realizadas operação de inclusão, exclusão e atualização, para
verificar se uma tabela ou índice está fragmentado pode ser utilizado o
comando DBCC SHOWCONTIG ou executar uma consulta na visão de
gerenciamento dinâmico SYS.DM_DB_INDEX_PHYSICAL_STATS.
A figura 2 foi extraída da revista MSDNpublicada em 2007 e atualizada
em 2013 (Microsoft 2013 E),descreve quais informações são apresentadas
quando é executado o comando DBCC SHOWCONTIG:
Figura 2: Descrição das colunasdo resultado comando DBCC SHOWCONTIG
(Microsoft 2013 E).
A revista MSDNem 2007 da Microsoft (2013, E) publicou o artigo DBCC
SHOWCONTIG, no qual descreve que um índice pode ser recriado, ou as
páginas de nível folha podem ser reordenadas em uma ordem lógica e ou
reconstruído. Com base nas informações apresentadas pelo comando DBCC
SHOWCONTIG ou consulta a visão SYS.DM_DB_INDEX_PHYSICAL_STATS,
o administrador de banco de dados deve fazer a operação de desfragmentação
mais adequada.
4. Modelo lógico proposto
As etapas do processo de desfragmentação do banco de dados é composta
por uma arquitetura de 3 níveis:
1º - Tarefa de inicialização/finalização: Responsável por iniciar o
processo e parar.
2º - Tarefa de desfragmentação: Verifica quais objetos estão
fragmentados, cria uma fila desses objetos e executa a desfragmentação um a
um.
3º - Tarefa de monitoria: Responsável por verificar se as atividades do
processo de desfragmentação não estão causando algum tipo de impacto nas
aplicações em execução, além de monitorar ela também para o processo de
desfragmentação que está causando bloqueio e inicializa o próximo da fila.
O modelo lógico de todo processo pode ser visualizado melhor pelo
fluxo desenhado o qual são percorridas todas as etapas de desfragmentação
dos índices:
4.1 A implementação
O procedimento proposto é responsável por executar a leituras das visões do
sistema gerenciador de banco de dados, identificar os índices fragmentados,
executar o procedimento de desfragmentação, atualizar as estatísticas dos
índices do banco de dados, prover a disponibilidade dos objetos do banco de
dados possibilitando o acesso por processos concorrentes.
4.1.1 Composição
A rotina é composta por duas jobs que possuem ações distintas, sendo uma
dependente da outra e que englobam um conjunto de procedures e tabelas
para execução desta tarefa. Ao todo são seis (6) procedimentos, cinco (5)
tabelas e duas (2) jobs.
Todos os objetos foram criados em um banco de dados de
gerenciamento do profissional de banco de dados.
4.1.2 Descrição dos objetos
A execução perfeita da rotina acontece em uma ordem definida pelos próprios
objetos
e
inicia-se
com
a
execução
da
jobDBA_D
Watchdog'sdefragmentationbyIndexdefrag:
DBA_D - Watchdog'sdefragmentationbyIndexdefrag – é um job que é
executado diariamente várias vezes no dia, o primeiro passo de sua execução
é a proceduresp_DBA_Blockade_Agent_Detector que recebe um parâmetro
com o tempo que a mesma ficará em execução, sendo este parâmetro é
definido em minutos.
Figura 3: Modelo lógico do processo de desfragmentação do banco de dados.
A figura 4 apresenta parte do script SQL referente ao procedimento
sp_DBA_Blockade_Agent_Detector.
sp_DBA_Blockade_Agent_Detector
Figura 4: Script SQL Procedure sp_DBA_Blockade_Agent_Detector.
sp_DBA_Blockade_Agent_Detector este procedimento tem por
sp_DBA_Blockade_Agent_Detector–este
finalidade não permitir que a desfragmentação dos índices fique aguardando a
liberação das tabelas bloqueadas, que quase sempre é causada
causa
pelas
aplicações que estão em processamento ou que estão travadas. Sendo assim,
o banco de dados não precisa ficar exclusivamente disponível para rotina
nomeada Watchdog's.. Está procedure e responsável também pela execução
da jobDBA_D - DatabasesdefragmentationbyIndexdefrag,
Databasesdefragm
, sendo está a
primeira tarefa da procedure sp_DBA_Blockade_Agent_Detector.
sp_DBA_Blockade_Agent_Detector Quando um
bloqueio
das
tarefas
executadas
pela
job
jobDBA_D
DatabasesdefragmentationbyIndexdefrag é ocasionado em qualquer ponto do
processo,
este
é
detectado
pe
pela
proceduresp_DBA_Blockade_Agent_Detector
sp_DBA_Blockade_Agent_Detectorque
que realiza algumas checagem
para garantir que o bloqueio é real, e após está certificação é registrado em um
arquivo de log a descrição da ocorrência para a equipe responsável pelo
gerenciamento de banco de dados (DBA) informando todos os dados do
bloqueio, inclusive um tempo limite para que a equipe de gestão do banco de
dados faça está checagem. Após obter as informações a equipe pode verificar
se o bloqueio está ocorrendo devido a uma aplicação “travada” (que não
nã está
mais respondendo aos comandos), neste caso encerra-se
encerra se a aplicação e o
processo bloqueador deixa de existir liberado o processo bloqueado. Em casos
que a aplicação não está travada e não pode ser interrompida a
proceduresp_DBA_Blockade_Agent_Detector
sp_DBA_Blockade_Agent_Detectorencarrega-se
se de resolver o
empasse, após termino do tempo que foi informado no e-mail
e mail enviado para
equipe
de
automação,
a
procedure
sp_DBA_Resolver_Blockade
sp_DBA_Resolver_Blockadeé
executadacom
com o objetivo de interromper o processo (iniciado pela jobDBA_D
job
DatabasesdefragmentationbyIndexdefrag
defragmentationbyIndexdefrag) que está sendo travado e iniciar o
próximo. Toda vez que é detectado um bloqueio é feita o cadastro do mesmo
na tabela TB_Blockade_Log.
TB_Blockade_Log
A
figura
5
sp_DBA_Resolver_Blockade.
sp_DBA_Resolver_Blockade
apresenta
parte
do
procedimento
Figura5:: Script SQL
S
Proceduresp_DBA_Resolver_Blockade
sp_DBA_Resolver_Blockade.
sp_DBA_Resolver_Blockade– Sua finalidade é eliminar o processo
sp_DBA_Resolver_Blockade
bloqueado e iniciar o próximo, mas para isso precisa ser garantido que o
bloqueio é real e que não possa ocasionar algum dano ao objeto envolvido.
Também é responsável por apontar qual tarefa estava sendo executada pelas
rotinas da jobDBA_D - DatabasesdefragmentationbyIndexdefrag,
DatabasesdefragmentationbyIndexdefrag quando a
única alternativa possível foi eliminar o processo bloqueado, neste caso é feita
a inclusão na tabela TB_Last_Execution
TB_Last_Executio informando o ponto que o processo
estava executando e com base na informação dessa tabela será retomada a
rotina.
DBA_D - DatabasesdefragmentationbyIndexdefrag–
DatabasesdefragmentationbyIndexdefrag Este job tem por
finalidade desfragmentar todos os índices,
índices, de todos os bancos agendadose
agendados
para essa tarefa a procedure sp_DBA_Get_Database_for_Indexdefragé
sp_DBA_Get_Database_for_Indexdefrag
executada. A job possui uma característica em particular ela só fica com status
de habilitado quando está em execução (ação é de responsabilidade da
proceduresp_DBA_Blockade_Agent_Detector
sp_DBA_Blockade_Agent_Detector),, sendo este status alterado para
desabilitado assim que sua tarefa é concluída. Este passo é muito importante,
pois é verificado pela procedure sp_DBA_Blockade_Agent_Detectorcomo
sp_DBA_Blockade_Agent_Detector
parâmetro
para
execução
da
jobDBA_D
DBA_D
DatabasesdefragmentationbyIndexdefrag
DatabasesdefragmentationbyIndexdefrag.
sp_DBA_Get_Database_for_Indexdefrag – Após execução da
procedure
(que
foi
executada
pela
job“DBA_D
DatabasesdefragmentationbyIndexdefrag”
DatabasesdefragmentationbyIndexdefrag”)
mostrada anteriormente, este
procedimento checa o ponto da sua última execução e apartir daí é definido
onde a rotina
otina vai iniciar. É realizado avaliação da tabela de agendamento dos
bancos de dados tb_DBA_Weekday_Database_Defragment,
tb_DBA_Weekday_Database_Defragment o responsável
pelo banco de dados
dos DBA, faz o cadastramento dos bancos de dados que
podem sofrer a manutenção em cada dia da semana e seus respectivos
horários, por teste motivo o procedimento pode ser executado mais de uma
vez, então a procedure faz a leitura e se não existir pendencia, os bancos de
dados
selecionados
serão
analisados
e
a
proceduresp_DBA_Get_Indexes_for_SHOWCONTIGserá executada passando
como parâmetro o nome do banco de dados. Esse procedimento é realizado
até o ultimo banco de dados selecionado. Após sua conclusão é executada a
proceduresp_DBA_Get_Indexes_for_Defragmente por último fechando a rotina,
é executado a proceduresp_DBA_Defragment_Indexes_with_INDEXDEFRAG.
Caso seja identificada uma pendência, o ponto inicial da procedure
passa a ser esse. São dois (2) pontos de inícioda rotina em caso de pendência,
sendo o primeiro quando estava sendo executada a procedure
sp_DBA_Get_Indexes_for_Defragment e a mesma não finalizou, neste caso é
feita a execução da procedure novamente e após sua conclusão a
proceduresp_DBA_Defragment_Indexes_with_INDEXDEFRAG será executada
finalizando toda rotina ao termino da sua execução. O outro ponto de início da
rotina
ocorre
quando
a
procedure
sp_DBA_Defragment_Indexes_with_INDEXDEFRAG estava sendo executada
e é interrompida, neste caso é feita sua execução novamente e após conclusão
a
rotina
finaliza.
O
último
passo
da
proceduresp_DBA_Get_Database_for_Indexdefragé desabilitar jobDBA_D DatabasesdefragmentationbyIndexdefrag, este passo é muito importante, pois
é utilizado como parâmetropelaproceduresp_DBA_Blockade_Agent_Detector.
sp_DBA_Get_Indexes_for_SHOWCONTIG– Ao executar a procedure
é feita a extração de todos os índices do banco de dados no qual foi passando
como parâmetro, inserindo-os na tabela TB_Result_Showcontig.
sp_DBA_Get_Indexes_for_Defragment – Ao executar a procedure é
feita a leitura da tabela TB_Result_Showcontige com base nas informações
coletadas, são analisados os índices armazenando os resultados na tabela
TB_fraglist, após coletar os resultados serão definidos os índices que estão
fragmentados. Essa procedure ainda tem mais uma tarefa que é limpar a tabela
TB_Result_Showcontig,armazenando os dados contidos nela na tabela
TB_Result_Showcontig_Log.
sp_DBA_Defragment_Indexes_with_Indexdefrag – Ao executar a
procedure serão coletados dados da tabela TB_fraglist, os registros são índices
que estão fragmentados e então é iniciada a desfragmentação índice a índice.
Em conjunto também é feita a atualização das estatísticas de cada índice, esse
procedimento é necessário para manter o SQL Server sempre atualizado com
os melhores caminhos para obtenção dos dados e o procedimento de
desfragmentação, visto que alguns processos (DBCC) do SQL Server não faz
isso automaticamente.
4.2 Controlando a concorrência dos objetos fragmentados
A experiência obtida através da utilização do plano de manutenção do SQL
Server, demostrou que manter o controle da concorrência dos objetos
fragmentadosé fundamental para que o máximo de indicies possa ser
desfragmentado e prioriza a disponibilidade do banco de dados para os
processos de negócio.Diante deste fato foi criado a procedure
sp_DBA_Blockade_Agent_Detector que no momento da desfragmentação dos
indicies é responsável por identificar bloqueios e trata-los. A rotina é executada
de forma paralela com a rotina de desfragmentação, o procedimento identifica
bloqueios no sistema gerenciador de banco de dados, analisa a causa e se
identificado que a causa é devido o processo de desfragmentação, então toma
se a definição de abortar o processo de desfragmentação do objeto ou tabela
que causou o bloqueio. Assim o procedimento de desfragmentação continua a
execução com próximos índices.
5. Análise dos Resultados
Com a implantação do Watchdog o processo de desfragmentação dos índices
pode ser realizado em todos os bancos de dados sem intervenção do DBA,
através de processos automatizados chamados de JOB, este procedimento foi
realizado em uma empresa da área financeira, no caso foi realizado avaliação
em um servidor DELL modelo PowerEdge6850, que possui quatro
processadores de quatro núcleos de 3200 MHz Intel Xeon, Hyper-Threaded, 64
GB memória RAM, Windows Server 2003 e SQL Server 2005 da plataforma
32bits / x86, uma instancia de banco de dados que possuía 69 bases cerca de
1.5 TB (terá byte) de armazenamento de dados.
A execução do plano de manutenção do SQL Server de
desfragmentação dos índices que havia sido configurado pelo administrador de
banco de dados (DBA), não executava em todos os bancos conforme
programado,devido a bloqueio das tabelas causado por outras aplicações e
tempo limitado para execução da rotina (estimado para executar durante um
período de 2horas e 30minutos, sendo entre 03horas e 05horas e 30 minutos
da madrugada),procedimento em sua grande parte estourava o limite de tempo
de execução programado tendo que ser abortado pelo DBA, poiscausa impacto
nas aplicações e consequentemente prejuízos para empresa.
A figura 6e 7 apresentaa lista de bancos de dados que possuía índices
fragmentados, na coluna decor branca, a quantidade de índices fragmentados
na coluna de cor vermelha, a quantidade de índices desfragmentados na
coluna de cor verde e ototal de índices na coluna de cor azul, antes e após
execução da rotina de desfragmentação Watchdog.
Na figura 6 destaca-se a quantidade de índices fragmentados antes da
execução
da
rotina
Watchdog,
dos
bancos
de
dados
analisadosaproximadamente 51% dos índices fragmentam diariamente,
causando impactos para leitura e armazenamento dos dados, pois a
fragmentação ocupa espaço e páginas de dados não utilizados no disco.
Figura 6: Quantidade de índices fragmentados superior ao desfragmentados.
A figura 7 mostra a situação de fragmentação e desfragmentação do
banco de dados após a execução da rotina de desfragmentação Watchdog.
Houve um aumento significativo de índices desfragmentados, em média 91%
dos índices foram desfragmentados.
Figura 7: Quantidade de índices desfragmentados maior que fragmentados.
A fragmentação existe,porém é mínima, na maioria das situações ocorre
devido às aplicações queficam 24 horas em execuçãoe que causam bloqueios
paraas tabelas, com o processo Watchdoga desfragmentação desses índices
ocorrerá na próxima execução da rotina, caso não ocorram bloqueios
novamente, sendo que enquanto existir bloqueios a rotina de controle de
concorrências de registros atua abortando o processo de desfragmentação
sobre o objeto. Em outras situações, na qual os índices encontram-se
fragmentadose a rotina não torna se efetiva, o DBA deve solucionar os casos
isoladamente.
6. Conclusões
A rotina de desfragmentação Watchdog realiza a tarefa de desfragmentação
dos índices com eficiência, sendo afetados apenas aqueles que estão
fragmentados.
Sempre será executada a desfragmentação em todos os bancos de
dados sem causar impacto, bloqueios dos sistemas de negócio, outras rotinas
que também estão em execução, tornando eficiente e necessário, visto que
desfragmentar os bancos de dados tornam as operações de consulta mais
rápidas e eliminam espaços desperdiçado devido aos dados fragmentação no
disco.
Com tudo foi identificado que a rotina Watchdog trouxe benefícios para o
sistema de gerenciador de banco de dados, deixando o menor número possível
de índices fragmentados, atualizando as estatísticas, otimizando as consultas
diárias executadas pelas aplicações, minimizando a leitura em disco conhecido
como IO.
Este processo de desfragmentação dos índices pode ser desenvolvido
para outrosSistemasGerenciadores de Banco de Dados (SGDB), exemplo
Oracle, em trabalhos futuros, visto que mostrouse eficiente em identificar quais
índices estão fragmentados, na desfragmentação dos índices, no controle de
concorrência quanto ao uso dos objetos por outras rotinas e no paralelismo
com outras aplicações.
Referências
QUEST SOFTWARE, 2013, A, Spotlight on Oracle Edition, Inc.Link
http://www.spotlightonoracle.com.br/quest/spotlight-on-oracle, acessado em
09/04/2013.
QUEST SOFTWARE, 2013, B, Spotlight on SQL Server Enterprise, Inc.Link
http://www.quest.com/spotlight-on-sql-server-enterprise,
acessado
em
09/04/2013.
IDERA,
2013,
SQL
defrag
manager,
Inc.
Link
http://www.idera.com/en/ProductsSolutions/SQLServer/SQLDefragManager.
aspx, acessado em 09/04/2013.
HOFFER J., RAMESH V., TOPI Heik, Modern database management 11th
edition, 2005.
Microsoft Corporation, 2007, A. How to check Fragmentation on SQL Server
2005,
MSDN,
2007.
Link
http://blogs.msdn.com/b/jorgepc/archive/2007/12/09/how-to-checkfragmentation-on-sql-server-2005.aspx, acessado em 09/04/2013.
Microsoft Corporation, 2013, B. Reorganize and Rebuild Indexes, TechNet. Link
http://technet.microsoft.com/en-us/library/ms189858.aspx, acessado em
09/04/2013.
Microsoft Corporation, 2013, C.Microsoft SQL Server 2000 Index
Defragmentation
Best
Practices
(2009),
TechNet.
Link
http://technet.microsoft.com/pt-br/library/cc966523.aspx#EHAA,
acessado
em 24/06/2013.
Microsoft Corporation, 2013, D. Clustered Index Structures (2012), TechNet.
Link: http://technet.microsoft.com/en-us/library/ms177443(v=sql.105).aspx,
acessado em 24/06/2013.
Microsoft Corporation, 2013, E.
DBCC SHOWCONTIG (Transact-SQL),
MSDN.
Link
http://msdn.microsoft.com/ptbr/library/ms175008%28v=sql.105%29.aspx, acessado em 25/06/2013.
BATTISTIS
J.,
“SQL
SERVER
2005
ADMINISTRAÇÃO
DESENVOLVIMENTO”, Axcel Books do Brasil Editora, p. 200-201, 2005.
&
VALDURIES P., TAMER M., “Principles of Distributed Database Systems”,
Third Edition, Pearson Education, Inc, 2011.
BERNSTEIN P.A., HADZILACOS V., GOODMAN, N. Concurrency Control and
Recovery in Database Systems. Massachusetts: Addison Wesley, 1987.
AGRAWAL, S., CHAUDHURI, S., NARASAYYA, V. Automated Selection of
Materialized Views and Indexes for SQL Databases. In:PROCEEDINGS OF
THE INTERNATIONAL CONFERENCE ON VERY LARGE DATABASES
(VLDB), p. 496-505, 2000.
CONNOLLY T., BEGG C., Database Systems: A Practical Approach to Design,
Implementation, and Management, 2004.
RAHIMI S. K., HAUG F. S., Distributed Database Management Systems: A
Practical Approach, 2010.

Documentos relacionados