As 9 Regras Ninjas de Performance

Esse post resume muita coisa do que já passei. Resolvi compilar uma série de regras para abordar os problemas mais comuns de performance. Essas são as “regras ninjas” para ajudar a guiar o trabalho do dia a dia e atingir bons resultados em pouco tempo.   REGRA 1: DISK – Monitore o consumo de recursos…

9

SET SHOWPLAN_TEXT

Esse é mais um artigo da série “Saga da otimização com comandos antigos” Parte 1: SET STATISTICS IO Parte 2: DBCC DROPCLEANBUFFERS Parte 3: DBCC SHOWCONTIG Parte 4: DBCC PAGE Parte 5: sp_spaceused Parte 6: DBCC IND Parte 7: DBCC INDEXDEFRAG Parte 8: DBCC DBREINDEX Parte 9: sp_detach_db No último artigo, falamos do impacto do…

0

sp_detach_db

Esse é mais um artigo da série “Saga da otimização com comandos antigos” Parte 1: SET STATISTICS IO Parte 2: DBCC DROPCLEANBUFFERS Parte 3: DBCC SHOWCONTIG Parte 4: DBCC PAGE Parte 5: sp_spaceused Parte 6: DBCC IND Parte 7: DBCC INDEXDEFRAG Parte 8: DBCC DBREINDEX No último artigo, comentei sobre as melhores práticas para escolha…

0

DBCC DBREINDEX

Esse é mais um artigo da série “Saga da otimização com comandos antigos” Parte 1: SET STATISTICS IO Parte 2: DBCC DROPCLEANBUFFERS Parte 3: DBCC SHOWCONTIG Parte 4: DBCC PAGE Parte 5: sp_spaceused Parte 6: DBCC IND Parte 7: DBCC INDEXDEFRAG No último artigo, comparamos o INDEX SCAN e HEAP SCAN e mostramos que o…

0

DBCC INDEXDEFRAG

Esse é mais um artigo da série “Saga da otimização com comandos antigos” Parte 1: SET STATISTICS IO Parte 2: DBCC DROPCLEANBUFFERS Parte 3: DBCC SHOWCONTIG Parte 4: DBCC PAGE Parte 5: sp_spaceused Parte 6: DBCC IND No último artigo, falei sobre a forma mais rápida de executar um scan. Nesse artigo vou falar sobre…

0

DBCC IND

Esse é mais um artigo da série “Saga da otimização com comandos antigos” Parte 1: SET STATISTICS IO Parte 2: DBCC DROPCLEANBUFFERS Parte 3: DBCC SHOWCONTIG Parte 4: DBCC PAGE Parte 5: sp_spaceused No último artigo, apresentei um problema muito comum nas estruturas HEAPS para armazenamento de dados. Agora vamos falar da equivalência: Table scan…

0

sp_spaceused

Continuando a série dos comandos históricos, vou apresentar o comando sp_spaceused. Embora esse seja um comando antigo, essa é uma das procedures que mais uso no dia a dia. Nos posts anteriores comentei sobre a importância do SET STATISTICS IO e do uso correto do DBCC DROPCLEANBUFFERS. Comentei sobre o DBCC SHOWCONTIG para visualizar a…

4

DBCC PAGE

Continuando a série dos comandos históricos, vamos falar sobre o famoso DBCC PAGE. Esse é o quarto artigo da série: já comentei sobre o SET STATISTICS IO, DBCC DROPCLEANBUFFERS e DBCC SHOWCONTIG. Vou recriar o ambiente do LOJADB: Em seguida, quero me certificar que está funcionando tudo corretamente. Antes de continuar, algumas pessoas desconfiaram da…

2

DBCC SHOWCONTIG

Tudo começou no artigo sobre a vantagem de usar o SET STATISTICS IO e depois falei sobre o uso correto do DBCC DROPCLEANBUFFERS (existe uso correto?). Dessa vez vamos explorar o antigo companheiro DBCC SHOWCONTIG. Vamos começar analisando a query que demorava 1ms: Esse tempo de 1 milissegund era possível porque todas os dados estavam…

2

DBCC DROPCLEANBUFFERS

No artigo anterior, comentei sobre a vantagem de usar o SET STATISTICS IO como ferramenta de análise de performance. Terminei o artigo o mistério: por que o número de read-ahead e logical reads não bate? O resultado esperado deveria ser:   Limpando o Buffer Bool O comando DBCC DROPCLEANBUFFERS remove as páginas do banco de…

2

SET STATISTICS IO

Há 20 anos quando comecei a estudar banco de dados, imaginava que o SQL era uma caixa-preta. Bastava inserir os dados e não precisaria me preocupar mais. Eu era um desenvolvedor sem conhecimento de banco de dados. Para relembrar esse cenário, vou criar um banco de dados chamado LOJADB usando um pendrive (meu storage de…

3

Arquitetura do SQL Server

Finalmente publicado o primeiro vídeo da série Fundamentos de Banco de Dados. https://channel9.msdn.com/Series/SQL-Fundamentos/Arquitetura-do-SQL-Server Nesse episódio vamos falar sobre as grandes famílias de componentes. Para quem já viu minhas palestras, deve ter notado que sempre comento sobre a separação entre Relational Engine (Linguagem, compilação e execução) e Storage Engine. Além disso, temos a família de Protocols…

9

Vídeos de Fundamentos Banco de Dados

Decidi começar um experimento diferente, que vai além do blog, que é uma série de vídeos explicativos sobre o funcionamento do SQL Server. Há muito tempo tenho pensado nessa ideia e finalmente se tornou realidade. A série estréia no Channel 9.   https://channel9.msdn.com/Series/SQL-Fundamentos Ainda não planejei o número exato de vídeos. Gostaria de fechar em…

5

Desafio: Cadê meu Join?

Dessa vez apresento um desafio curioso que recebi esses dias enquanto estava no escritório. Uma pessoa me apresentou uma consulta SQL que relacionava os dados de cliente com os endereços. SELECT c.* FROM Clientes c LEFT OUTER JOIN Regioes r ON c.regiaoId = r.regiaoId ANDr.regiaoId IS NULL O interessante é que o plano de execução…

12

Query Recursiva

Você sabia que o SQL Server consegue criar uma Query Recursiva? Utilizamos, como exemplo, uma tabela que armazena as informações de MENU de uma página Web. CREATE TABLE tbMenu ( id INT NOT NULL IDENTITY(1,1) PRIMARY KEY, idPai INT NULL, Nome VARCHAR(30) NOT NULL ) INSERT tbMenu (idPai,Nome) VALUES (NULL,’Menu’),(1,’Vestuario’),(1,’Brinquedo’),(1,’Informatica’), (2,’Terno’),(2,’Casaco’),(2,’Sapato’),(2,’Meia’),(3,’Carrinho’), (3,’Boneca’),(4,’Netbook’),(4,’Webcam’),(4,’Desktop’) SELECT * FROM…

11