Postagens

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...

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 :)

Você sabe o que é o timestamp e o UTC? Como converter (UTC) em current time zone no SQL?

Imagem
    Fala pessoal, belezura? Espero que estejam todos muito bem! Hoje eu quero trazer para vocês um conteúdo bem bacana!  "ALERTA DE SPOILER" Esse conteúdo vai complementar a nova série que farei nesse blog, onde irei falar de Extend Events!  So, let's go :)   Afinal, o que é TIMESTAMP?  TimeStamp é simplesmente um ponto único em uma linha do tempo, se estamos falando de uma linha no tempo, precisamos de um marco inicial, certo? Esse marco inicial do timestamp é chamada de "Unix Epoch", que seria " 1970-01-01T00:00Z (1 de janeiro de 1970, à meia-noite)", em UTC 1. Abaixo, coloquei uma imagem onde eu mostro como isso funciona, podemos ver  que existe um marco zero e o timestamp é o tempo decorrido, geralmente em segundos ou milissegundos, desde o marco zero até aquele instante no tempo, e esse instante no tempo é o mesmo no mundo todo, vamos pegar esse exemplo "1556322834".  Muitas linguagens de programação já converte esse timestamp em um horá...

SQL 2022 - Novo predicado de busca "Is distinct from/ is not distinct from" - nova forma de comparar valores Null

Imagem
                                       Olá pessoal, espero que estejam todos muito bem :)  Hoje vim trazer para vocês um novo e excelente recurso T-SQL do SQL 2022, o predicado de busca "Is distinct from/ is not distinct from", com esse predicado de busca novo procurar valores NULL se tornou um argumento SARG :). Antes de iniciar esse artigo preciso previamente relembrar o leitor que comparações com valores nulos pode não ser algum simples, pois quando se tem um null na tabela o SQL trata isso como desconhecido. Essa tabela abaixo ilustra muito bem o que digo, qualquer comparação com valores null o resultado é desconhecido, dessa forma é descartado na consulta, pois o sql só compara  true or false. Existem formas de tratar isso e eu mostrarei nesse artigo, mas te adianto que no SQL 2022 as coisas ficam muito mais simples. Na tabela acima podemos ver que o novo pre...

Você conhece a nova função GENERATE_SERIES do SQL server 2022? Nunca foi tão fácil realizar contagens no SQL :)

Imagem
  Olá pessoal, espero que estejam todos muito bem :)     Hoje eu vim trazer para vocês uma nova função do SQL server que nos permite fazer contagens de forma muito simples, eu acho incrível como essa linguagem vem sofrendo melhorias tão boas ao longo dos anos.     O cenário de utilização é muito simples, vamos supor que você precise realizar uma contagem no SQL, como por exemplo, de 1 até 10, a maioria as pessoas pensam em utilizar um while, mas pode ser feito com "CTE", "CURSOR" ou até mesmo "GO TO",  de todas essas que falei CTE com certeza é a minha favorita, para exemplo irei fazer uma contagem de 1 até 10 utilizando WHILE  e CTE,  pois não recomendo realizar contagens utilizando de "GO TO"  ou "CURSOR".     Utilizando WHILE: Utilizando CTE: Todas essas linhas de código vão se resumir a apenas uma única linha com a função GENERATE_SERIES, conforme oi exemplo abaixo: Generate_series  Mágico né? Vamos conhecer os parâmetros q...

Você sabe o que são (statements, batchs, query_hash e query_plan_hash) no SQL SERVER?

Imagem
    Hello people! Espero que estejam todos ótimo :)     Hoje eu gostaria de falar sobre uma sopa de palavras, mas que são muito importantes para o entendimento do sql server. resolvi escrever sobre esses termos, pois vejo que alguns DBAs possuem dúvidas sobre, ou até mesmo desconhecem. Irei começar explicando sobre o BATCH e o STATEMENT, abaixo um resumo de cada palavra BATCH:  No Transact-SQL, um lote é um conjunto de instruções SQL enviadas juntas e executadas como um grupo, uma após a outra.  STATEMENT: É uma unidade atômica de trabalho e é completamente bem-sucedida ou falha completamente. Agora que sabemos o que cada uma dessa palavra significa, segundo a própria Microsoft, vou mostrar um exemplo, onde podemos ver um BATCH que possui 3 statements: Agora que você sabe o que é um BATCH e um STATEMENT, vamos reutilizar o exemplo acima para explicar o que é QUERY_HASH E UM QUERY_PLAN_HASH, mas antes vamos  as definições: QUERY_HASH :  Valor de ha...