[Video] Assista às consultas de gravação de Brent


Esta manhã, eu queria escrever algumas novas consultas de “ruído de fundo” para minhas aulas de Mastering. Nessas aulas, os alunos executam cargas de trabalho ao vivo no banco de dados Stack Overflow e solucionam problemas de desempenho, e quanto mais uma carga de trabalho variada eu estiver executando, mais realista ela parecerá. Para esta sessão, eu especificamente queria escrever rápido consultas – consultas que produziriam dados de estilo do mundo real em alguns segundos, no estilo que um usuário realmente os escreveria.

Eu transmiti a coisa toda ao vivo no Twitch, e você pode assistir.

Assista às consultas OLTP do Brent Design com dados de estouro de pilha do BrentOzar em www.twitch.tv

Se você quiser pular para diferentes partes do vídeo, aqui estão os pontos principais em que iniciei novas consultas:

  • 7min: 33sec in: apresento o tópico do que estou tentando fazer. A primeira consulta busca as tags nas quais o usuário trabalha com mais frequência e mostra suas pontuações. Por acaso, encontrei Gordon Linoff, um atendente prolífico.
  • 26m: 08s: deixo que me digam quais consultas você deseja que eu escreva e depois começo a trabalhar para encontrar as principais tags em um período.
  • 34m: 54sec: explico por que amo COALESCE e como um amigo meu acabou colocando uma pílula de enjoo na bunda.
  • 42m: 30seg: codifico um cabeçalho das principais perguntas com mais respostas.
  • 1h: 04m: Recebo uma ótima pergunta sobre detecção de parâmetros nas instruções de atualização, por isso codifico uma demonstração mostrando ao vivo.
  • 1h: 41m: encontro as respostas mais recentes das 10 pessoas mais ativas e explico por que você precisa usar datas codificadas em vez de GETDATE () ao trabalhar com exportações mais antigas do Stack Overflow.
  • 1h: 57m: escrevo uma consulta para encontrar tempos médios de resposta para um determinado período e tag e construí-la no topo de uma exibição para simular o que os usuários fariam e, em seguida, escrevo outro proc no topo dessa exibição para encontrar as respostas mais rápidas em uma data alcance.

Gostou desta sessão? Siga-me no Twitch, YouTube, Facebook ou Mixer para ser alertado sempre que eu estiver transmitindo.

Aqui estão os scripts da demonstração:

CREATE OR ALTER PROC dbo.usp_GetTagsForUser @UserId INT AS BEGIN SELECT TOP 10 COALESCE(p.Tags, pQ.Tags) AS Tag, SUM(p.Score) AS TotalScore, COUNT(*) AS TotalPosts FROM dbo.Users u INNER JOIN dbo.Posts p ON u.Id = p.OwnerUserId LEFT OUTER JOIN dbo.Posts pQ ON p.ParentId = pQ.Id WHERE u.Id = @UserId GROUP BY COALESCE(p.Tags, pQ.Tags) ORDER BY SUM(p.Score) DESC; END GO /* Mehow - top tags AbusedSysadmin question w/most answers DavidHooey - how many of my questions have been answered DamnTank - last 10 posts by the top 10 posters Bilbo - average answer response time Gdonufrio - fastest answer */ CREATE OR ALTER PROC dbo.usp_RptTopTags @StartDate DATETIME, @EndDate DATETIME, @SortOrder NVARCHAR(20)= 'Quantity' AS BEGIN /* Changelog: 2020/05/28 Mehow - I needed a quick report for the sales team. */ SELECT TOP 250 pQ.Tags, COUNT(*) AS TotalPosts, SUM(pQ.Score + COALESCE(pA.Score, 0)) AS TotalScore, SUM(pQ.ViewCount) AS TotalViewCount FROM dbo.Posts pQ LEFT OUTER JOIN dbo.Posts pA ON pQ.Id = pA.ParentId /* Answers join up to questions on this */ WHERE pQ.CreationDate >= @StartDate AND pQ.CreationDate < @EndDate AND pQ.PostTypeId = 1 GROUP BY pQ.Tags ORDER BY CASE WHEN @SortOrder = 'Quantity' THEN COUNT(*) WHEN @SortOrder = 'Score' THEN SUM(pQ.Score + pA.Score) WHEN @SortOrder = 'ViewCount' THEN SUM(pQ.ViewCount) ELSE COUNT(*) END DESC; END GO EXEC usp_RptTopTags @StartDate = '2010-11-10', @EndDate = '2010-11-11'; GO CREATE OR ALTER PROC dbo.usp_RptPostLeaderboard @StartDate DATETIME, @EndDate DATETIME, @PostTypeName VARCHAR(50) AS BEGIN /* Changelog: 2020/05/29 Jonathan9375 - make it work for multiple PostTypes 2020/05/28 AbusedSysadmin - New social media project to display viral questions. */ SELECT TOP 250 * FROM dbo.PostTypes pt INNER JOIN dbo.Posts p ON pt.Id = p.PostTypeId WHERE p.CreationDate >= @StartDate AND p.CreationDate < @EndDate AND pt.Type = @PostTypeName ORDER BY AnswerCount DESC; END GO EXEC usp_RptPostLeaderboard @StartDate = '2010/05/01', @EndDate = '2010/05/02', @PostTypeName = 'Question' GO CREATE OR ALTER PROC dbo.usp_RptQuestionsAnsweredForUser @UserId INT AS BEGIN /* Changelog: 2020/05/29 David Hooey - PM also wants to show a percentage 2020/05/28 David Hooey - Product manager wants to show each user's number of questions */ WITH MyQuestions AS ( SELECT pQ.Id AS QuestionId, pQ.AnswerCount FROM dbo.Users u INNER JOIN dbo.Posts pQ ON u.Id = pQ.OwnerUserId /* My questions */ INNER JOIN dbo.PostTypes pt ON pQ.PostTypeId = pt.Id AND pt.Type = 'Question' WHERE u.Id = @UserId ), MyAggregates AS ( SELECT COUNT(*) AS MyQuestions, SUM(CASE WHEN AnswerCount > 0 THEN 1 ELSE 0 END) AS Answered FROM MyQuestions ) SELECT MyQuestions, Answered, 100.0 * Answered / MyQuestions AS AnsweredPercent FROM MyAggregates END GO EXEC usp_RptQuestionsAnsweredForUser @UserId = 26837; EXEC usp_RptQuestionsAnsweredForUser @UserId = 9527192; GO CREATE OR ALTER PROC dbo.usp_DashboardFromTopUsers @AsOf DATETIME = '2018-06-03' AS BEGIN /* Changelog: 2020/05/28 DamnTank - last 10 posts by the top 10 posters */ CREATE TABLE #RecentlyActiveUsers (Id INT, DisplayName NVARCHAR(40), Location NVARCHAR(100)); INSERT INTO #RecentlyActiveUsers SELECT TOP 10 u.Id, u.DisplayName, u.Location FROM dbo.Users u WHERE EXISTS (SELECT * FROM dbo.Posts WHERE OwnerUserId = u.Id AND CreationDate >= DATEADD(DAY, -7, @AsOf)) ORDER BY u.Reputation DESC; SELECT TOP 100 u.DisplayName, u.Location, pAnswer.Body, pAnswer.Score, pAnswer.CreationDate FROM #RecentlyActiveUsers u INNER JOIN dbo.Posts pAnswer ON u.Id = pAnswer.OwnerUserId WHERE pAnswer.CreationDate >= DATEADD(DAY, -7, @AsOf) ORDER BY pAnswer.CreationDate DESC; END GO EXEC usp_DashboardFromTopUsers GO CREATE OR ALTER VIEW dbo.AverageAnswerResponseTime AS SELECT pQ.Id, pQ.Tags, pQ.CreationDate AS QuestionDate, DATEDIFF(SECOND, pQ.CreationDate, pA.CreationDate) AS ResponseTimeSeconds FROM dbo.Posts pQ INNER JOIN dbo.Posts pA ON pQ.AcceptedAnswerId = pA.Id WHERE pQ.PostTypeId = 1; GO CREATE OR ALTER PROC dbo.usp_RptAvgAnswerTimeByTag @StartDate DATETIME, @EndDate DATETIME, @Tag NVARCHAR(50) AS BEGIN /* Changelog: 2020/05/29 James Randell - fixing bugs left over from Bilbo 2020/05/28 Bilbo Baggins - find out when fast answers are coming in */ SELECT TOP 100 YEAR(QuestionDate) AS QuestionYear, MONTH(QuestionDate) AS QuestionMonth, AVG(ResponseTimeSeconds * 1.0) AS AverageResponseTimeSeconds FROM dbo.AverageAnswerResponseTime r WHERE r.QuestionDate >= @StartDate AND r.QuestionDate < @EndDate AND r.Tags = @Tag GROUP BY YEAR(QuestionDate), MONTH(QuestionDate) ORDER BY YEAR(QuestionDate), MONTH(QuestionDate); END GO EXEC usp_RptAvgAnswerTimeByTag @StartDate = '2013-01-01', @EndDate = '2013-01-08', @Tag = '' GO CREATE OR ALTER PROC dbo.usp_RptFastestAnswers @StartDate DATETIME, @EndDate DATETIME, @Tag NVARCHAR(50) AS BEGIN /* Changelog: 2020/05/28 Gabriele D'Onufrio - looking for the fastest answer fingers in the West, possibly fraud */ SELECT TOP 10 r.ResponseTimeSeconds, pQuestion.Title, pQuestion.CreationDate, pQuestion.Body, uQuestion.DisplayName AS Questioner_DisplayName, uQuestion.Reputation AS Questioner_Reputation, pAnswer.Body AS Answer_Body, pAnswer.Score AS Answer_Score, uAnswer.DisplayName AS Answerer_DisplayName, uAnswer.Reputation AS Answerer_Reputation FROM dbo.AverageAnswerResponseTime r INNER JOIN dbo.Posts pQuestion ON r.Id = pQuestion.Id INNER JOIN dbo.Users uQuestion ON pQuestion.OwnerUserId = uQuestion.Id INNER JOIN dbo.Posts pAnswer ON pQuestion.AcceptedAnswerId = pAnswer.Id INNER JOIN dbo.Users uAnswer ON pAnswer.OwnerUserId = uAnswer.Id WHERE r.QuestionDate >= @StartDate AND r.QuestionDate < @EndDate AND r.Tags = @Tag ORDER BY r.ResponseTimeSeconds ASC; END GO EXEC usp_RptFastestAnswers @StartDate = '2013-01-01', @EndDate = '2014-01-08', @Tag = '' GO /* License: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) More info: https://creativecommons.org/licenses/by-sa/4.0/ You are free to: * Share - copy and redistribute the material in any medium or format * Adapt - remix, transform, and build upon the material for any purpose, even commercially Under the following terms: * Attribution - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. * ShareAlike - If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. */ read more

Como acessar APIs REST do Power BI programaticamente

Get Datasets in Workspace


Neste artigo, vou explicar como usar a API REST do Power BI para acessar programaticamente os recursos do Serviço do Power BI. Também discutirei a base da API REST e como usar as APIs usando o Postman. Usando a API REST do Power BI, você pode gerenciar programaticamente os serviços administrativos, como obter uma lista de painéis e áreas de trabalho, atualizar um conjunto de dados, copiar um painel de uma área de trabalho para outra e assim por diante.

Para acessar com segurança a API REST do Power BI, primeiro precisamos solicitar um token de incorporação usando o qual podemos chamar as APIs e executar nossas funções. Embora várias operações possam ser executadas usando as APIs REST, neste artigo, investigaremos especificamente como autorizar um aplicativo e chamaremos as APIs usando o Postman. read more

Importar documentos XML para tabelas do SQL Server usando pacotes SSIS

SSIS Advanced editor for XML Source


Este artigo orienta você na importação de documentos XML para tabelas SQL usando pacotes SSIS.

Introdução ao XML

XML (Extensible Markup Language) é uma linguagem de marcação simplificada. É uma linguagem padrão W3C de código aberto e usada principalmente para armazenar e transportar dados. Foi derivado da Linguagem de Marcação Generalizada Padrão (SGML). É diferente do HTML, mas possui algumas semelhanças.

HTML é estático enquanto XML é de natureza dinâmica

  • Em HTML, usamos tags predefinidas, enquanto o XML usa tags definidas pelo usuário

  • XML é uma linguagem que diferencia maiúsculas de minúsculas, enquanto HTML não é

  • HTML concentra-se nos dados apresentados, enquanto o foco XML está no armazenamento e transporte de dados

  • A definição de esquema XML (XSD) é usada para validar, formatar e descrever um arquivo XML. Um documento deve ser validado no XSD para ser um arquivo XML válido. Um documento XML é válido se o XSD definir as tags e atributos para ele. XSD também é uma recomendação do W3C (World Wide Web Consortium) read more

    Trabalhando com bancos de dados SQL do Azure usando a CLI 2.0 do Azure

    SQL Database created


    No artigo anterior, Introdução à CLI 2.0 do Azure, expliquei como começar com
        a CLI do Azure 2.0. Eu também expliquei como instalá-lo em uma máquina local e demonstrei alguns comandos. Neste artigo, vou explicar como criar um banco de dados SQL usando a CLI 2.0 do Azure. Além disso, na parte posterior do artigo, também mostrarei como criar um backup do banco de dados SQL usando a CLI do Azure. Criar um banco de dados SQL usando a CLI do Azure nos ajuda a automatizar as coisas e remove a criação manual propensa a erros dos bancos de dados e backups. read more

    Perguntas da entrevista do SQL para o segundo turno

    SQL interview questions and answer: Trivial execution plan


    Neste artigo, falaremos sobre perguntas e respostas da entrevista SQL que podem ser feitas na segunda rodada
        estágio técnico. Essas perguntas da entrevista são baseadas em experiências da vida real. Portanto, pode ser uma fonte muito útil ao se preparar para a segunda rodada de entrevistas técnicas do SQL.

    Muitas empresas realizam uma entrevista técnica para avaliar o conhecimento dos candidatos. Na maioria das vezes, esse processo de recrutamento não completa apenas uma entrevista técnica. A primeira entrevista se concentra principalmente em suas capacidades e tenta descobrir se você atende às qualificações básicas necessárias para o trabalho. Após ser convidado para a segunda rodada de entrevistas técnicas, suas perguntas serão muito difíceis que a anterior.
        Por esse motivo, você deve preparar perguntas detalhadas para esta etapa. Neste artigo, você encontrará algumas instruções SQL
        perguntas da entrevista que possam ser solicitadas para o segundo estágio e respostas detalhadas. read more

    Posso descarregar o DBCC CHECKDB para outro servidor?


    Você deseja verificar a corrupção, mas não quer desacelerar o servidor de produção principal.

    Neste post, estou falando especificamente sobre descarregamento o processo de verificação de corrupção. Não estou falando de fazer verificação de corrupção ambos o primário e outros servidores – isso é maravilhoso, e se você estiver fazendo isso, deve se abraçar. Você está fazendo um bom trabalho. Quem é um bom cachorro? Tu es! Bom cachorro.

    Agora, para o resto de vocês – seu servidor de produção é lento e você deseja saber quais são as desvantagens de executar o CHECKDB em outros servidores. Aqui estão as questões a serem consideradas. Vou falar em termos gerais sobre risco comercial. Eu gostaria de poder dar uma idéia do risco que você está correndo por lá, mas sem ver seus servidores e práticas, isso é difícil. Comece colocando seu RPO e RTO por escrito, e esses riscos começarão a fazer sentido com base no tamanho dos seus dados, na quantidade de dados que você deseja perder e por quanto tempo deseja diminuir: read more

    Qual serviço da Plataforma de Dados do Azure devo escolher? – BLOG DE TECNOLOGIA SQL

    image


    Então, você decidiu usar o Azure para seu projeto de dados novo ou existente? Esta série de blogs está focada na escolha da tecnologia certa para o seu projeto. É difícil né? Tantas opções e tantas variáveis. Este post se concentrará mais no custo das escolhas.

    Vamos começar com uma rápida visão geral das várias opções e depois aprofundaremos cada uma delas ao longo de uma série de postagens.

    * Não discutiremos MySQL, PostgreSQL, Cosmos ou Azure Synapse Analytics nesta postagem. read more

    Banco de dados SQL Server TempDB e contenção de trava

    Eliminating the PAGELATCH_UP latch problem fort he TempDB database


    Neste artigo, aprenderemos os problemas de contenção de trava que podemos enfrentar no banco de dados SQL Server TempDB. Também discutiremos os motivos e o método de solução desses problemas de contenção de trava. Especialmente, mencionaremos o recurso de metadados TempDB com otimização de memória que foi introduzido no SQL Server 2019.

    Primeiramente, aprenderemos brevemente as características essenciais do banco de dados TempDB e também falaremos sobre o conceito de trava do SQL Server para que possamos entender todos os aspectos dos problemas de contenção de trava do banco de dados TempDB com mais clareza. read more

    Estou no Podcast TRY / CATCH


    Estou no Podcast TRY / CATCH 1Em uma recente viagem ao Farm Credit Services em Omaha, sentei-me para conversar com Natalie Gerdes e Tim Goergen, do FCS, para gravar um episódio do podcast TRY / CATCH.

    Você pode ouvir o podcast aqui ou ouvi-lo no iTunes, Google Play e Spotify.

    Eu falo sobre como as pessoas dizem que você deve ter um plano de carreira de 3 ou 5 anos e … isso é realmente muito difícil para pessoas como eu. Acho que nunca houve um momento em minha carreira em que eu poderia ter previsto com precisão o que eu faria em 3 ou 5 anos – e qualquer previsão que eu tivesse estava completamente errada. read more

    Painéis de servidor e banco de dados no Azure Data Studio

    Add new widget details


    O Azure Data Studio (ADS) é um desenvolvimento de banco de dados leve e integrado para oferecer suporte no local e na nuvem
        bancos de dados. Pode ser instalado no Windows e no sistema operacional Linux. Suponho que você esteja familiarizado com o
        SQL Server Management Studio. Se você trabalha na instância do SQL Server baseada em Linux, poderá instalar apenas o ADS naqueles
        sistemas. Podemos usar terminais integrados para executar as sessões do PowerShell e Terminal para o sistema Linux. read more