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.