[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

Impacto da ordem da coluna no Composite Index SQL Server

Impacto da ordem da coluna no Composite Index SQL Server 2


Neste artigo, exploraremos o Composite Index SQL Server e os principais impactos sobre os pedidos. Também veremos SQL
    Estatísticas de atualização do servidor para determinar um plano de execução otimizado do índice Compositivo.

Introdução

Os índices do SQL Server são um fator vital no desempenho da consulta e no desempenho geral do sistema. Usamos cluster e
    índices não agrupados com configurações diferentes. Você deve passar pela categoria de artigos SQLShack Indexes para se familiarizar com
    índices no SQL Server. read more

Como encontrar o espaço usado por tabelas e índices no SQL Server – Parte 3

Como encontrar o espaço usado por tabelas e índices no SQL Server - Parte 3 3


Por: Aaron Bertrand | Atualizado: 2020-05-26 | Comentários | Palavras-chave: 1 | 2 3 Mais> Administração de banco de dados
Problema

No

Parte 1, escrevi
sobre a descoberta de mais detalhes sobre grandes tabelas do SQL Server e
no

Parte 2, mostrei um procedimento armazenado do SQL Server que facilita a montagem de todas essas informações
em um único conjunto de resultados. Esse procedimento, no entanto, assume que você já sabe qual
Tabela (s) do SQL Server para investigar. E se você souber apenas que os arquivos de um determinado
Banco de dados do SQL Server
estão crescendo ou parecem mal configurados? Não seria bom encontrar as mesas
nesse banco de dados com o maior tamanho em disco ou o maior número de linhas?

Solução

Eu olhei para a solução de
Parte 2, e percebi que levaria pouco
mais do que um procedimento de invólucro para atingir meu objetivo. O conceito é que você passa
no nome do banco de dados, o número de tabelas que você deseja retornar e se
você deseja classificar por tamanho ou por contagem de linhas. O procedimento executaria uma consulta no
sys.partitions ou sys.dm_db_database_page_allocations para determinar as n tabelas principais e, em seguida –
cada tabela da lista – chame o procedimento original. Isso produziria
n conjuntos de resultados, cada um mostrando como uma tabela é distribuída
nos arquivos e grupos de arquivos.

Outra abordagem poderia ser alterar o procedimento original
dinamizar cada tabela e seus índices em um único conjunto de resultados, mas isso pode ser mais
difícil de criar e consumir.

Antes de mostrar o código no procedimento de wrapper que criei, vamos criar
um banco de dados simples com dois grupos de arquivos, três arquivos e duas tabelas, apenas para manter
os resultados explicativos, mas digeríveis. Aqui está o banco de dados:

CREATE DATABASE gronk 
ON PRIMARY
  (name = N'gronk_data1'filename = N'/var/opt/mssql/data/gronk1.mdf',    size = 10 MB),
FILEGROUP SECONDARY
  (name = N'gronk_data2a', filename = N'/var/opt/mssql/data/gronk2a.mdf',   size = 10 MB),
  (name = N'gronk_data2b', filename = N'/var/opt/mssql/data/gronk2b.mdf',   size = 10 MB)
LOG ON
  (name = N'gronk_log',    filename = N'/var/opt/mssql/data/gronk_log.ldf', size = 10 MB);

Em seguida, duas tabelas simples, uma com mais linhas e a outra com menos linhas, mas mais
dados:

USE gronk;
GO -- in the first table, we'll put a lot of rows, but small row size CREATE TABLE dbo.tblPrimary
(
  id int NOT NULL,
  CONSTRAINT pk_tblPrimary PRIMARY KEY (id),
  INDEX      ix_tblPrimary (id DESC)
) ON [PRIMARY];
GO INSERT dbo.tblPrimary(id) SELECT [object_id] FROM sys.all_objects;
  -- in the second table, we'll put fewer rows, but larger row size CREATE TABLE dbo.tblSecondary
(
  id int NOT NULL,
  filler char(4000) NOT NULL DEFAULT '',
  CONSTRAINT pk_tblSecondary PRIMARY KEY (id)
) ON [SECONDARY]; CREATE INDEX ix_tblSecondary ON dbo.tblSecondary(id DESC) INCLUDE (filler) ON [SECONDARY];
GO INSERT dbo.tblSecondary(id) SELECT TOP (1000) [object_id] FROM sys.all_objects;
GO read more

Como configurar um ambiente Amazon RDS para MySQL

Como configurar um ambiente Amazon RDS para MySQL 4


Neste artigo, explicarei como configurar o ambiente MySQL RDS na AWS. RDS é
    a Serviço de banco de dados relacional Disponível no Amazonas o que nos permite girar
    instale qualquer instância de banco de dados relacional sem precisar se preocupar com a infraestrutura por trás dela. Os usuários podem se conectar a essa instância com muita facilidade e começar a criar aplicativos de banco de dados com facilidade. Este artigo se concentrará mais em como configurar o ambiente RDS MySQL e não muito nos detalhes do MySQL. read more

Uma má combinação – SQLBlog

Uma má combinação - SQLBlog 5


Uma de nossas equipes realiza periodicamente uma consulta agregada em meia dúzia de tabelas, de tamanhos variados, em quatro bancos de dados. Uma das tabelas não ficará permanentemente; é um pequeno heap (300 mil linhas, 10 MB) com uma coluna LOB (nvarchar(max)) sendo usado temporariamente para filtrar SKUs.

De vez em quando, a consulta causa esse desagradável despejo de pilha:

Local: lobss.cpp: 725
Expressão: 0
SPID: 420
ID do processo: 22984
Descrição: nunca deve acontecer

Msg 3624, Nível 20, Estado 1, Linha 5
Uma verificação de asserção do sistema falhou. Verifique o log de erros do SQL Server para obter detalhes. Normalmente, uma falha de declaração é causada por um erro de software ou corrupção de dados. Para verificar a corrupção do banco de dados, considere executar o DBCC CHECKDB. Se você concordou em enviar despejos para a Microsoft durante a instalação, um mini despejo será enviado à Microsoft. Uma atualização pode estar disponível na Microsoft no Service Pack mais recente ou em um hotfix do Suporte técnico. read more

O SQL ConstantCare® agora informa quais índices devem ser descartados.


SQL ConstantCare

Os índices diminuem as alterações nos dados.

O SQL Server não tem o conceito de índices assíncronos – cópias dos dados que podem ser atualizados posteriormente quando estiver entediado. Ele deve manter todos os índices não clusterizados atualizados, toda vez que você altera dados, como uma exclusão / atualização / inserção.

Mo ‘índices, mo’ problemas.

É por isso que, na minha aula de Ajuste de índice de masterização, inicio meu D.E.A.T.H. Método com eliminação de duplicação e eliminação de índices que não estão sendo usados. Você quer se livrar do peso morto que está apenas diminuindo sua velocidade e é especialmente importante antes de adicionar mais índices. read more

Uma visão geral da tarefa XML nos pacotes SSIS

XML task editor in SSIS Package


Introdução

Podemos usar um pacote SSIS para executar várias tarefas, como importar, transformar e obter saída em vários formatos. Depois que lançamos o Visual Studio 2019 e criamos um projeto de serviços de integração, ele mostra várias tarefas na caixa de ferramentas do SSIS. Neste artigo, exploraremos o Tarefa XML no SSIS.

Caixa de ferramentas SSIS

Visão geral de uma tarefa XML

Usamos a Tarefa XML para validar, comparar os documentos XML, aplicar várias transformações. Ele usa XSLT (Extensible Stylesheet Language Transformations) para aplicar a transformação nos dados XML. Também podemos mesclar documentos XML de várias fontes e criar um documento XML abrangente. read more

[Video] Assista Brent Write T-SQL


Hoje de manhã, trabalhei em uma nova verificação do sp_BlitzFirst para encontrar estatísticas que foram atualizadas nos últimos 15 minutos, possivelmente causando problemas de cache do plano e detecção de parâmetros. Eu transmiti ao vivo e você pode assistir.

Na parte 1, na primeira hora, escrevo a consulta de prova de conceito:

Na parte 2, na segunda hora, movo a consulta para sp_BlitzFirst, teste, depure e verifique no Github:

E finalmente, na terceira hora, mudo para abrir as perguntas e respostas e faço algumas demos ao vivo: read more