Postagens

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

Usando extend event para verificar quantas vezes uma query executou no banco.

Imagem
      Olá pessoal, espero que estejam todos bem!          Hoje vim trazer para vocês uma maneira de contar quantas vezes uma determinada query foi executada no SQL-SERVER.   Vamos utilizar o extend event para fazer essa contagem.   Primeiro passo é descobrir qual é o queryhash dessa query, queryhash é o identificador da query, podemos pegar esse queryhash recuperando o plano de execução ou via DMV, irei demonstrar pegando pelo plano de execução: Agora que pegamos o queryhash, que nesse caso é "0xBA334941B40ABB82", precisamos converter ele para bigint, pois o tipo de dados do extend event é diferente do tipo de dados do plano de execução. Agora vamos pegar esse número e construir um  extend event com os eventos abaixo: sp_statement_completed sql_batch_completed sql_statement_completed Para facilitar a vida de todos, eu vou deixar o script criado e vocês só precisam trocar  os campos em vermelhos, os 3 primeiros marcado...

SQL 2022 - Melhoria na função STRING_SPLIT

Imagem
       Olá, pessoal, espero que estejam todos bem :)       Hoje eu vim trazer para vocês uma melhoria que foi incorporada no SQL 2022, que é a coluna "Ordinal" no output da saída da função "String_split", essa melhoria já havia sido implantada no Azure SQL, mas se você ainda não conhece vem conferir :)     Para quem não conhece essa função, ela realiza a separação de valores separados por um limitador, por exemplo:                                        Aqui temos essa coluna "text", nela temos uma linha com diversos valores separados por ";"                                         Abaixo vemos que ao utilizar a função string_split, transforma essa única linha em diversas outras com o valores que estavam entre o...

Como passei na certificação aws Cloud Practitioner em 6 dias :)

Imagem
 Fala pessoal, que saudades de escrever no blog hein! Sei que estou há tempos sem escrever nada :( Hoje eu gostaria de mostrar como eu fiz para me preparar para a certificação da aws cloud Practitioner.      Após passar na prova da az-900 na segunda às 00:30, pela manhã decidir que iria estudar para a AWS, então comecei a pesquisar as provas que estavam disponíveis e qual eu poderia obter para começar a ingressar na cloud aws, então verifiquei a cloud Practitioner que é equivalente a az-900 da Microsoft, Acessando o site da AWS verifiquei que eles tem um programa de treinamentos e um curso especifico para essa certificação, pois bem, comecei o curso na própria segunda-feira, eu achei esse curso muito bom, os instrutores possuem uma excelente didática, falam em pt-br e te ensinam brincando, lembro de uma aula onde o instrutor explica a diferença entre o S3 e o EBS, o cara se veste de juiz e na tela aparece um ringue , achei bem legal e com certeza isso fez com qu...

Window Functions: Ntile() - Construindo grupos.

Imagem
Olá pessoal, espero que estejam todos bem, hoje gostaria de falar de uma função que quase nunca vejo sendo utilizada, mas é muito útil no dia a dia, principalmente dos profissionais de BI, com essa função de janela, podemos fazer agrupamento de forma fácil e rápida. Vamos ao cenário: Temos uma tabela com 100 linhas e precisamos criar 10 grupos, ou seja a cada 10 linhas teremos um novo grupo: Muito simples não? Criamos os grupos sem o menor esforço. Agora o céu é o limite, podemos combinar essa função com uma window functions Sum, por exemplo para somar os id e reiniciar a cada grupo. Reparem que legal, eu usei a NTILE para formar um grupo, coloquei em um CTE(nada mais que uma subquery)  e após isso usei esse grupo para fazer uma soma acumulativa que reinicia a cada grupo!! Já resolvi desafios complexos de T-SQL seguindo essa linha!! Bem pessoal, hoje é algum simples, espero que tenham gostado! Até mais! query utilizada: create table #aux ( id int identity ,aux char(1) ) --rodar sep...

Sorteio voucher 500r$ em cursos

 Olá pessoal, espero que estejam todos bem!!!  Hoje vim sortear um voucher de 500r$ em cursos, segue sorteio no vídeoooo!  

Dica de performance: Eliminando cursor com Window Functions + top 1 with ties

Imagem
 Olá  pessoal, tudo bem? Hoje gostaria de dar uma dica bem legal!! Muitos de vocês já devem saber que cursor na maioria das vezes é um grande vilão de performance no SQL-SERVER, isso porque o SQL não foi feito para processamento linha a linha e sim para um processamento em lote, vamos pensar SET-BASED! Hoje estarei mostrando para vocês um caso muito comum do dia dia. Vamos ao cenários: Precisamos pegar a última compra do cliente! Simples assim. Temos a tabela  cliente_tb, que guarda os dados do cliente e a tabela   venda_tb que guarda os dados da venda, basicamente um cliente pode fazer N  compras e nós precisamos pegar a ultima. Segue cursor que vejo na maioria dos casos: drop table if exists #aux create table #aux ( id_cliente int  ,nome           varchar(250) ,dt_venda datetime  ) DECLARE @id_cliente int -- Cursor para percorrer os registros DECLARE cursor1 CURSOR FOR select id_cliente from cliente_tb --Abrind...