Postagens

Tuning no Postgres utlizando View Materializada

Imagem
  Fala pessoal, espero que estejam todos muito bem! Sei que faz algum tempo desde o último post, mas pretendo retomar as publicações a partir de agora. Para recomeçar com tudo, vamos falar sobre como um DBA do SQL Server conseguiu otimizar o desempenho no PostgreSQL.      O desafio era otimizar a query abaixo:    A query é relativamente simples, porém, o grande desafio está na cardinalidade. Estamos lidando com um alto volume  de dados e uma modelagem N:N, o que tornou o tuning bastante desafiador. Após a execução do plano, pude observar alguns pontos. Criamos índices para aprimorar a consulta, mas mesmo assim, nada disso resultou em um desempenho aceitável para a query. Para a galera do SQL Server (assim como eu rs),  podemos utilizar o comando: EXPLAIN (FORMAT JSON, VERBOSE, ANALYZE) no PgAdmin para visualizar o plano de execução de forma gráfica. Ufa, isso realmente facilitou minha vida. Foi então que comecei a analisar os dados e desmembrar a query, percebendo que estavam sendo rec

Amazon RDS parte 1

Imagem
     Olá pessoal, espero que estejam todos bem, hoje eu irei começar a série sobre RDS AWS, nesse post eu irei resumir sobre o que é o RDS, como funciona e quais são seus principais recursos. Introdução ao Amazon RDS O Amazon Relational Database Service (RDS) é um serviço de banco de dados gerenciado pela Amazon Web Services (AWS) que facilita a criação, a operação e a escalabilidade de bancos de dados relacionais na nuvem. Com o RDS, você pode configurar, operar e escalar bancos de dados relacionais populares, como MySQL, PostgreSQL, Oracle, SQL Server e MariaDB. O RDS gerencia tarefas rotineiras de administração de banco de dados, como provisionamento de hardware, aplicação de patches de software e backups, permitindo que você se concentre em desenvolver aplicativos e melhorar a experiência do usuário. Como funciona o Amazon RDS? O Amazon RDS fornece uma interface simples para que você possa criar e gerenciar bancos de dados relacionais na nuvem. Para começar, basta escolher o mecani

Como me preparar para a certificação da Google Cloud Digital Leader?

Imagem
     Olá pessoal, tudo bem? Hoje quero mostrar para vocês como foi o caminho das pedras para estudar para a certificação do Google, que, na minha opinião, é até fácil, mas tem uma barreira de entrada: o inglês. Claro, se você já tiver o inglês, vai ser muito mais simples.      O que essa certificação cobra?      Por ser uma certificação de entrada, o que é cobrado são conceitos de cloud e produtos Google. As questões da prova te dão um user case e você precisa escolher qual o melhor serviço da Google se encaixa. Eu realizei o curso oficial da Google, mas na minha visão, ele é muito básico, e só com isso não tem como passar na prova. Porém, você deve fazê-lo e pegar cada serviço que ele mostra e ler a documentação. Infelizmente, não há muita coisa disponível sobre produtos da Google em português, eu mesmo não achei nada.      Segue o link do curso do Google: https://www.cloudskillsboost.google/paths/9?hl=pt-br Além de ler bastante as documentações, recomendo utilizar o ChatGPT para te a

Procedure para criar um "Merge" dinamico com filtros.

Imagem
Há algum tempo construí um script que gera um script de merge de forma dinâmica. Basta passar alguns parâmetros. Hoje venho trazer um script parecido, mas que realiza o merge por partes. Ao utilizar esse script no dia a dia, deparei-me com casos em que ele não poderia ser utilizado, como, por exemplo, quando a tabela tem uma coluna identity ou é necessário passar filtros. Para resolver essa situação, criei este novo script em que a ideia é passar alguns parâmetros e deixá-lo fazer todo o resto por nós. Antes de tudo, vamos conhecer os parâmetros:      Vamos ao cenário de uso. Suponha que você tenha duas tabelas em servidores diferentes e precisa fazer um insert onde não exista e update onde exista. Para esse tipo de situação, esse script funciona muito bem. Com apenas esses parâmetros, ela cria o seguinte script para você: Mágico, né? Imagine quanto tempo você economizaria e poderia focar em outras coisas! É isso, pessoal. Espero que gostem. abaixo o link do script: https://github.com/

retrospectiva 2022

    Olá pessoal, espero que estejam todos muito bem! Hoje é o último dia útil de 2022 e chegando o fim do ano, é o momento de olharmos para o ano que se passou e verificar tudo aquilo que fizemos, o que não fizemos e o mais importante planejar o futuro, pois se não conseguiu fazer no ano que se passou ainda teremos o próximo ano inteiro para fazer, como dizia Steve jobs  "Não faz sentido olhar para trás e pensar: devia ter feito isso ou aquilo, devia ter estado lá. Isso não importa. Vamos inventar o amanhã e parar de nos preocupar com o passado."     Esse ano foi incrível para mim, pois consegui atingir diversas metas que planejei em 2021, vou listar aqui algumas delas. Desenvolvimento de hard skill  Ingles (dediquei muitas horas esse ano)  Databricks   Passando na prova de entrada (delta laker)  Mongodb  Aperfeiçoamento em SQL Server no assunto de alta disponibilidade ALWAYS ON AG ALWAYS ON FCI  Entendimento do cluster Windows   LOG SHIPPING  Aperfeiçoamento em SQL Server no

Como realizei um tuning que caiu o tempo de execução de 8h para 7minutos!

Imagem
                Fala pessoal belezura? Hoje quero mostrar para vocês como fiz para realizar um tuning mágico em um cliente aqui da consultoria, espero que gostem. Vou mostrar a query original para vocês, claro com dados fakes e nome fake da tabela. Essa query gera o seguinte plano: Eu peguei a query pelo plano, então quando vi o plano já sabia que era um union com acesso a tabela 3 x, a partir desse momento fui tentar entender o que o dev queria fazer com isso.     Vou quebrar as 3 queries do union para entendemos juntos: Nessa primeira query ele queria simplesmente verificar quantas linhas tinham na tabela com o filtro de da data "maior", pegando também a maior data de carga, o resto ele coloca como 0 para que ele some tudo na CTE e fique com uma linha só. Depois ele faz a mesma lógica para pegar as linhas que são maiores que 7 dias, considerando a data de hoje: Por último ele faz isso para a tabela  Depois ele junta tudo isso em uma agregação na sub query: Legal, agora que

realizando tuning utilizando Window Function

Imagem
  Fala pessoal, beleza? Hoje gostaria de compartilhar com vocês um tuning que realizei em um cliente aqui na consultoria que trabalho. Esse ficou bem legal e achei que vale a pena compartilhar :)     Criei aqui um cenário para simularmos o que o cliente queria fazer, ele simplesmente queria pegar a maior venda por produto.    Eu construir uma query no banco de dados adventuresworks2014, para simular o que ele queria fazer, mas essa query aqui é bem mais simples do que a do cliente. Após entender o que o cliente queria, eu reescrevi a query, utilizando uma lógica com dense_rank() Analisando o plano de execução da query original, podemos ver que o SQL acessa a tabela SalesOrderDetail, duas vezes: Enquanto na reescrita, acessa apenas uma vez: Já irei mostrar abaixo o resultado no cliente, uma redução de 1h50 para 10s :) Profiler: É isso pessoal, se você não souber como utilizar Window Functions, eu tenho uma série aqui no blog :)