65ª Reunião Anual da SBPC
A. Ciências Exatas e da Terra - 2. Ciência da Computação - 2. Banco de Dados
Otimização de consultas e ajuste fino em Banco de Dados SQL Server
Mariana Angelo Lopes Sanches - FATEC-ID - Faculdade de Tecnologia de Indaiatuba
Maria das Graças Junqueira Machado Tomazela - FATEC-ID - Faculdade de Tecnologia de Indaiatuba
INTRODUÇÃO:
Estamos vivendo uma terceira revolução, a chamada “era da informação”, e com isso há um aumento na necessidade de armazenar dados. A manipulação e disponibilidade dessas informações com rapidez e eficiência também se fazem necessárias. Grandes organizações precisam, de forma rápida, do acesso a seus dados para a tomada de decisão. Sendo assim o tempo de processo se torna precioso.
Os Sistemas Gerenciadores de Banco de Dados (SGBD’s) tem a missão de armazenar e gerenciar a manipulação de dados de modo que as informações nele contidas sejam disponibilizadas de forma rápida e eficaz. No entanto diversos fatores influenciam no tempo do banco como, por exemplo, o hardware, mesmo assim não podemos ser dependentes do equipamento disponibilizado. Portanto se faz necessária a avaliação e otimização de consultas.
É neste contexto que essa pesquisa se insere, a fim de descobrir e investigar as melhores técnicas de otimização para a recuperação de dados em um banco SQL Server, possibilitando maior desempenho na obtenção de informações.
As perguntas que encaminharam essa pesquisa foram: Como se faz o processo de otimização de consultas em banco de dados? ; Quais as melhores técnicas para a melhoria de desempenho em recuperação de dados? ; A utilização de índices em consultas realmente é eficiente?
OBJETIVO DO TRABALHO:
Demonstrar melhores técnicas para a otimização de consultas em Banco de Dados SQL Server, assim: Pesquisar e compreender o processo de otimização de consultas em banco de dados relacionais. Elaborar, aplicar e analisar consultas em uma grande base de dados, com o intuito de obter melhores técnicas na recuperação de informações. Verificar a real eficiência na utilização de índices.
MÉTODOS:
Na primeira etapa deste trabalho foi realizado o levantamento da bibliografia relevante. Foram citados os conceitos de (GEHRKE e RAMAKRISHNAN, 2008) e (KORTH et.al.,2006) para explicar a linguagem de consulta e como ela é divida. Mencionamos (ELMASRI E NAVATHE, 2010) e (DATE, 2004), dentre outra bibliografias para melhor explicar a álgebra relacional, a utilização de índices e como se faz a otimização de consultas em uma base de dados SQL Server. Além disso, foi definida a estrutura do banco de dados utilizado para testes.
Na segunda etapa foram apresentados os conceitos da linguagem SQL (Structured Query Language) e como se faz o ajuste fino para a otimização de consultas baseado em autores como GERVAZONE; SACK e BRITO. Em paralelo, com base no que dizem esses autores, foram elaboradas consultas que foram aplicadas em uma grande base de dados, populada para essa pesquisa.
Na aplicação das consultas foram utilizados alguns comandos, como FREESYSTEMCACHE e DROPCLEANBUFFERS na limpeza de memória da máquina, para que entre uma consulta e outra os resultados fossem confiáveis. Para melhor análise dos resultados, utilizamos comandos como SET STATISTICS e SHOWPLAN.
Ao final foi realizada uma análise dos resultados com a bibliografia levantada para a conclusão da pesquisa.
RESULTADOS E DISCUSSÃO:
Nos teste realizados verificou-se a eficácia de alguns comandos ao aplicar consultas que retornam os mesmos resultados, porém utilizando comandos diferentes.
A utilização do GROUP BY, antes e depois do filtro através do comando HAVING e WHERE, mostrou uma diferença. Quando foi utilizado o filtro através da cláusula WHERE e após isso o agrupamento a consulta se tornou mais rápida. Isto porque o GROUP BY realiza a ordenação somente dos resultados filtrados e não de toda a tabela antes de fazer o filtro.
Sobre o comando de junção INNER JOIN ou JOIN, de acordo com o que foi levantado não há diferença no modo de sua aplicação, seja ela na cláusula WHERE ou com o predicado ON.
Já os comandos IN e EXISTS quando comparados causam uma diferença no desempenho e o EXISTS se mostra mais eficiente.
Os testes realizados com índices tiveram maior destaque.
O índice cluster se mostrou eficiente principalmente quando o resultado da consulta é um intervalo.
Foi verificado também que, quando necessária junção de tabela, utilizar o índice noncluster na chave primária e cluster na chave estrangeira torna a consulta mais rápida.
CONCLUSÕES:
Este trabalho se baseou nas operações da álgebra relacional, conceitos de índices e custo de acesso aos dados para demonstrar todo o processo de otimização utilizado pelo SGBD para criar sua estratégia de plano de consulta.
Concluiu-se ao longo dos testes que os ajustes nos comandos de certas consultas provocam uma diferença significativa para a obtenção dos dados de forma mais rápida. Porém os testes realizados com índices demonstram uma eficiência maior, em contrapartida não se pode utilizar índices para qualquer coluna. É necessário realizar uma análise das consultas mais realizadas no banco de dados e a partir disso criar os índices nas colunas em que sejam realmente necessárias. Caso isso não seja feito de forma correta a utilização de índices em excesso pode gerar até uma lentidão na base de dados, especialmente se tratando de alteração dos dados.
Como trabalhos futuros poderia se pesquisar e analisar a influência de índices na alteração dos dados no banco, ou seja, até que ponto a utilização de índices é eficiente de forma que não afete o desempenho no momento da inclusão ou exclusão dos dados.
Palavras-chave: SQL Server, Consultas, Ajuste Fino.