Performance Tuning #1

Fala pessoal, no post de hoje vou começar uma serie sobre performance tuning no SQL Server.


Um dos temas mais procurados, seja por desenvolvedores, galera de infra e até os próprios dbas é o de tuning.

Quem esta começando na área de banco de dados saiba que é um assunto bem relevante e que requer uma atenção especial.


Mas afinal o que é o famoso tuning ? De uma forma bem direta Tuning é otimização.


É uma ação que visa a otimização do desempenho no que se refere a dados. Encontrar meios para potencializar os recursos buscando sempre a máxima performance, seja na camada operacional ou mesmo na aplicação.


É importante ressaltar que um Tuning em Banco de Dados não é apenas aumentar recursos no servidor, acrescentando memória, disco ou processador. Isso pode fazer parte sim de uma solução de tuning, mas se for feito de forma isolada será apenas algo paliativo, com o passar do tempo com o crescimento do banco os problemas poderão voltar e esse adicionar recurso pode se tornar algo infinito.


O processo de Tuning em Banco de Dados deve considerar todas as possibilidades, infraestrutura, configurações e até a própria aplicação .


Esse processo se divide em 3 etapas

- Entendimento do problema; (para esse etapa existem algumas ferramentas que irão te auxiliar, nessa serie farei um outro post falando apenas sobre essas ferramentas)

- Diagnóstico completo (com as informações em mãos o dba deve saber onde deve olhar e o que fazer com esses dados)

- Otimização, de acordo com o diagnóstico (executar o tuning)


Você pode estar se perguntando, porque o tuning é necessário? Em uma sociedade cada vez mais ansiosa e acostumada a ter tudo instantaneamente na sua mão, não deve ser difícil ligar os pontos. Usuários de sites e sistemas no mundo todo, ficam extremamente insatisfeitos com qualquer oscilação de desempenho seja no momento de assistir um vídeo,

realizar uma compra em um site, ou até mesmo gerar um relatório para o chefe antes de uma reunião importante.


O volume de informação cresce a cada segundo, estudos recentes do IDC apontam o crescimento acelerado do volume de dados, principalmente por conta de dispositivos integrados Iot.


Diante desse cenário, o ambiente de banco de dados precisa acompanhar o crescimento e manter o bom desempenho das aplicações e sites. Avaliar constantemente o ambiente é uma excelente pratica do DBA para manter a performance.


Em resumo o tuning é necessário para garantir que o relatório que levava 1 minuto para gerar no sistema, continue levando 1 minuto ou algo bem próximo disso, mesmo o banco de dados dobrando de tamanho.


A queda de desempenho de um query(script) no banco de dados pode ser ocasionado por diversos fatores, os mais comuns são

- Sobrecarga de algum recurso (memória, cpu, disco)

Pense em um servidor com 100% de consumo de cpu durante 30 minutos, tudo o que o banco for executar vai sofrer lentidão, porque não tem cpu disponível, vai levar mais tempo que deveria

- Lock

O lock é um nível de proteção da integridade das transações no banco de dados, enquanto uma transação esta em execução usando determinada tabela ou dado, outros processos que precisam usar essa mesma tabela ou dado precisam aguardar o primeiro finalizar, para garantir a integridade daquela transação

- Índices

O índice é um recurso extremamente útil quando falamos de tuning de query, ele possibilita melhorar o plano de execução e agilizar a busca pelas informações, a falta de um índice ou até um índice criado de forma errada podem influenciar no plano de execução e com isso deixar a query ruim.

- Falta de manutenção preventiva de índices e estatísticas

o trabalho do dba no sql server deve ser constante, a manutenção do índice (melhorando a fragmentação dele) e a atualização de estatísticas devem ser feitos regularmente para garantir que o sql tenha todos os melhores recursos para montar os planos de execução das querys (não adianta apenas criar o índice e deixar, precisa mantê-lo com performance)


Para cada um desses fatores que citei, sobrecarga de desempenho, lock, índices e manutenção preventiva, o dba tem algumas atividades para realizar e auxiliar na resolução do problema, isso é realizar um tuning!


Podemos dividir o tuning em 3 categorias

- Hardware: Quando é identificado a real necessidade de melhoria de hardware do ambiente, aumentando recursos de memória, cpu e disco

- SQL Server: Ajustes de configuração, alocando mais memória por exemplo, ajustes de parâmetros para o ambiente a nível de instância e banco de dados (vai variar de ambiente para ambiente)

- Querys: Analisar as querys mais custosas, avaliando o plano de execução, criando ou ajustando índices, atualizando estatísticas se necessário ou até sugerindo uma alteração na query de maneira que ela fique mais rápida.


Particularmente eu gosto bastante desse assunto dentre tantos que o DBA SQL precisa atuar, é muito satisfatório quando você trabalha na melhoria de desempenho de uma query que levava 30 minutos por exemplo e consegue diminuir o tempo de execução dela para 20 segundos, já tive algumas experiências como essa.


Um ponto a se destacar é que nem sempre o processo "esta lento" precisando de um tuning porque uma única query demora a executar, eu já peguei casos em que as querys levavam milissegundos, porém o que tornava o processo lento é a quantidade de repetições dessa query. Me lembro que nesse caso o tuning na query baixou o tempo dela de cerca de 150 milissegundos para 10 milissegundos, pode parecer muito pouco, mas se fizermos vezes milhares e milhares de execuções a diferença no tempo total do processo baixou significativamente.


O DBA SQL precisa entender sobre performance tuning pois é uma das principais partes do trabalho, é claro que existem profissionais focados em outras áreas no SQL, mas todo DBA precisa ter conhecimento sobre esse assunto.


Nos acompanhe em nossas redes sociais!

Youtube(vídeos novos todas as quartas): https://www.youtube.com/channel/UChFeqc-m7HZNdkoP0CshMGQ

Face & Instagram(conteúdo diário): dba on boarding

Até a próxima, tchau!

#CG_Performance







52 visualizações0 comentário