SlideShare uma empresa Scribd logo
1 de 54
Escrevendo queries rápidas no SQL Server
Dirceu Resende
MCSA Database Development | BI Development
https://www.dirceuresende.com/blog
2º Encontro do Grupo SQL Server ES
Patrocinadores
APOIO:
Agenda
• Apresentação
• Por quê Performance Tuning é tão importante ?
• Índice? O que é isso ? Para que serve? Onde vive?
• Conhecendo o seu novo melhor amigo: Plano de execução
• Dicas de Query Tuning
Performance Tuning – Porquê?
• “No mundo atual, a maioria das pessoas não tem paciência para esperar
um site carregar por muito tempo e acabam entrando em outro logo em
seguida.” (escoladomarketingdigital.com.br)
• “Em média, usuários deixam qualquer site se ele não carregar no celular
dentro de três segundos” (Google)
• Um dos maiores motivos para o fracasso do Windows Vista foi o fato de
ser um sistema extremamente pesado e lento (tecnoblog.net)
Performance Tuning – Porquê?
• “O tablet TouchPad, da HP, foi um dos lançamentos mais esperados de 2011 - e logo
se converteu no maior fracasso do ano. O aparelho, criado para concorrer com o iPad,
da Apple, durou apenas sete semanas no mercado antes de a HP tomar a decisão de
acabar com ele, citando como motivo as vendas fracas. O motivo? Os consumidores
reconheceram imediatamente que o celular era lento demais” (estadao.com.br)
• “55% dos estudantes do Canadá admitem se estressarem por computadores lentos,
na síndrome da ampulheta (Hourglass Syndrome).” (nytimes.com)
• “66% dos americanos são estressados por computadores lentos e 23% se descrevem
como muito estressados por conta disso.” (reuters.com)
Performance Tuning – Porquê?
• Como você acha que seus usuários se comportam quando o seu sistema
demora 10 segundos pra retornar uma informação?
Performance Tuning – Por onde começar ?
• Entender o problema
• Elaborar o diagnóstico
• Aplicar dicas e técnicas de otimização
• Testes, Testes, Testes e depois, mais Testes!
• Aplicar a otimização
Performance Tuning – Índices
• Estrutura em disco associada a uma tabela ou view, que agiliza a recuperação das
linhas ordenando os dados (Quicksort).
• Analogia: Índice ou sumário de um livro
• Índices ocupam espaço em disco. Se você cria muitos índices, eles podem ocupar
mais espaço que a própria tabela.
• Índices agilizam as consultas, mas deixam as operações de escritas mais lentas
(INSERT, UPDATE, DELETE), porque elas precisam atualizar a tabela e todos os índices
relacionados. CUIDADO!
Performance Tuning – Índices
• Índice Clustered x NonClustered.
• Índice Composto x com INCLUDE.
• Índices Únicos.
• Covering Index.
• Missing Index (sys.dm_db_missing_index_groups
sys.dm_db_missing_index_group_stats e sys.dm_db_missing_index_details).
Performance Tuning – Índices
• Fillfactor
• Fragmentação (sys.dm_db_index_physical_stats)
• REORGANIZE x REBUILD.
• Verificar a utilização dos índices (sys.dm_db_index_usage_stats)
• Histograma (DBCC SHOW_STATISTICS(Nome_da_Tabela, Nome_do_Indice))
Performance Tuning – Índices
• Recomendações para criação de índice
 Covering Index
 Colunas computadas
 Foreign Keys são bons candidatos
 Tabelas com muitas escritas e poucas leituras não são boas opções (Ex: tabela de
logs)
 Bons índices são criados a partir de análises de como e quão frequente os dados
são acessados
Performance Tuning – O Plano de Execução
• Ferramenta gráfica para auxiliar do DBA/Desenvolvedor a entender como as consultas
estão sendo realizadas no banco e interpretadas pelo otimizador de consultas.
Performance Tuning – O Plano de Execução
• O que podemos extrair de um plano?
1. Está utilizando índice?
2. Qual índice foi utilizado?
3. Trabalho paralelizado?
4. Qual o volume dos dados?
5. Qual a operação de maior custo?
6. Qual o operador que foi utilizado?
Performance Tuning – O Plano de Execução
• Como fazemos a leitura de um plano?
Performance Tuning – O Plano de Execução
• Setas indicam volume de registros processados
Performance Tuning – O Plano de Execução
• Percentual do custo de cada operação
Performance Tuning – O Plano de Execução
• Informações detalhadas através de ToolTips
Performance Tuning – O Plano de Execução
• Sugestão de índices
Performance Tuning – O Plano de Execução
• Tipos de plano de execução
Estimado Atual
• Útil para desenvolvimento, onde
não pode executar a consulta
• Não funciona com objetos
temporários
• Não identifica alguns warnings
• Não é apurado para
desenvolvimento
• Baseado nas estatísticas
• Demonstra o que foi executado
Performance Tuning – O Plano de Execução
• Tipos de operadores: Table Scan
 Acontece em tabela sem índice cluster
 Em geral, operação de alto custo
Performance Tuning – O Plano de Execução
• Tipos de operadores: Clustered Index Scan
Performance Tuning – O Plano de Execução
• Tipos de operadores: Clustered Index Seek
Performance Tuning – O Plano de Execução
• Tipos de operadores: Lookup
Performance Tuning – O Plano de Execução
• Tipos de operadores: Key Lookup
Performance Tuning – O Plano de Execução
• Tipos de operadores: RID Lookup
Performance Tuning – O Plano de Execução
• Tipos de operadores: Sort
 Processamento linha a linha
 ORDER BY ou DISTINCT
Performance Tuning – O Plano de Execução
• Tipos de operadores: Stream Aggregate
 Consultas com agrupamento (GROUP BY, DISTINCT, etc)
Performance Tuning – O Plano de Execução
• Tipos de operadores: Compute Scalar
 Consulta com expressões, cálculos ou conversões
Performance Tuning – O Plano de Execução
• Tipos de operadores: Nested Loops
 Algoritmo muito eficiente
 Cenários com poucos registros
 Para cada linha da outer table, varre todas na inner table.
 Baixo consumo de CPU e memória
Performance Tuning – O Plano de Execução
• Tipos de operadores: Nested Loops
for each row R1 in the outer table
for each row R2 in the inner table
if R1 joins with R2
return (R1, R2)
Performance Tuning – O Plano de Execução
• Tipos de operadores: Merge Join
 Eficiente, mas precisa de dados ordenados
 Cenários com muitos registros
Performance Tuning – O Plano de Execução
• Tipos de operadores: Merge Join
 Se os dados não estiverem ordenados o Merge Join pode requerer a ordenação
através de um Sort Merge Join
 Se ambas tabelas não tiverem índice único, ocorre merge Join Many to Many –
tabelas sem PK, utiliza tempdb, menos eficiente
 Merge Join e seu impacto na TEMPDB
 Em geral consome pouca CPU e memória. Encontrado com frequência em
consultas com covering indexes.
Performance Tuning – O Plano de Execução
• Tipos de operadores: Merge Join
get first row R1 from input 1
get first row R2 from input 2
while not at the end of either input
begin
if R1 joins with R2
begin
return (R1, R2)
get next row R2 from input 2
end
else if R1 < R2
get next row R1 from input 1
else
get next row R2 from input 2
end
Performance Tuning – O Plano de Execução
• Troubleshooting
• LOOKUP: Covering index ou INCLUDE
 Index Scan pode ser reflexo de um Lookup caro
• Conversões: Impacto de conversões na cláusula WHERE
• Estatísticas: Número estimado <> número atual
Performance Tuning – O Plano de Execução
• Troubleshooting - Parameter sniffing
• Plano reutilizado não é adequado
 Criar procedures diferentes
 Adicionar cláusula WITH RECOMPILE
 Hint OPTION (RECOMPILE)
• DMVs para acessar plan cache:
 sys.dm_exec_cached_plans
 sys.dm_exec_sql_text(plan_handle)
 sys.dm_exec_query_plan(plan_handle)
Performance Tuning – Query Tuning
• Dicas para otimização de consultas SQL
• Grande parte dos problemas de performance de uma aplicação estão
relacionados a problemas de consultas SQL mal escritas.
• Técnicas para melhorar a utilização dos índices de consultas lentas
• Não tem “receita de bolo”!
Performance Tuning – Query Tuning
• Utilização de índices
SARGABLE Non-SARGABLE
= <>
> IN
< OR
>= NOT IN
>= NOT EXISTS
BETWEEN NOT LIKE
LIKE (sem iniciar com %) LIKE (iniciando com %)
Performance Tuning – Query Tuning
• Evitar tabelas variáveis
Performance Tuning – Query Tuning
• Evite recompilações desnecessárias
 Uso de uma cláusula WITH RECOMPILE na instrução CREATE PROCEDURE ou
EXECUTE
 Uso do hint OPTION(RECOMPILE) em um select
 Qualquer objeto referenciado é alterado (DROP, CREATE, ALTER), inclusive ao
adicionar ou ignorar restrições, parâmetros DEFAULT ou CHECK’s
 Executar sp_recompile
 Servidor sem espaço no cache
 Uma porcentagem suficiente de dados é alterada em uma tabela referenciada
pelo procedimento armazenado
 A SP intercala as operações DDL (Linguagem de definição de dados) e DML
(Linguagem de manipulação de dados)
Performance Tuning – Query Tuning
• Evite recompilações desnecessárias
Sem o hint
Com o hint
Performance Tuning – Query Tuning
• Substituir o uso de NOT IN por NOT EXISTS ou LEFT JOIN em subquery
Performance Tuning – Query Tuning
• Analisar uso de elementos NON-SARGABLE em cláusulas WHERE
Performance Tuning – Query Tuning
• Analisar o uso de DISTINCT e ORDER BY
 Operações extremamente pesadas
 Os dados não podem ser ordenados na aplicação ?
 Os dados realmente precisam ser ordenados em cada tabela temporária?
 DISTINCT é muito usado para mascarar erros em JOINs
Performance Tuning – Query Tuning
• Evitar o hint OPTION(MAXDOP 1)
Com OPTION(MAXDOP 1) Sem OPTION(MAXDOP 1)
Performance Tuning – Query Tuning
• Evitar o uso de JOIN com LinkedServer
Performance Tuning – Query Tuning
• Evitar o uso de JOIN com LinkedServer
Performance Tuning – Query Tuning
• Evitar o uso das funções LEFT() e SUBSTRING(Texto, 1, X) na cláusula WHERE
 Funções não são SARGABLE
 A mesma coisa NÃO acontece com LIKE ‘%String’
Performance Tuning – Query Tuning
• Colunas computadas são indexáveis!
Performance Tuning – Query Tuning
• Evite utilizar funções UDF (quando possível)
 Operações extremamente pesadas
 Mesma lógica, mas com performances diferentes
Performance Tuning – Query Tuning
• Considere substituir funções UDF por funções CLR
Performance Tuning – Query Tuning
• Analise os tipos de dados das colunas que são comparadas (Conversão)
 Coluna numérica: Coluna = valor ou Coluna = @variavel_numerica
 Coluna alfanumérica: Coluna = ‘valor’ ou coluna = @variavel_alfanumerica
Performance Tuning – Query Tuning
• Reescreva as regras de negócio da consulta
 Difícil de implementar
 Requer conhecimento da área de negócio e talvez, envolvimento da equipe de
desenvolvimento
 Não depende apenas do DBA
 Verificar JOINS e colunas não utilizadas
 Muitas vezes, o problema está na lógica da query
Próximos Encontros
• 24/06 - SQL Saturday Caxias do Sul
• 05/08 - 3º Encontro do SQL Server ES
• 19/08 - SQL Saturday Brasílila
• 23/09 - 4º Encontro do SQL Server ES
• 30/09 - SQL Saturday São Paulo
• 21/10 - SQL Saturday Rio de Janeiro
• 18/11 - SQL Saturday Salvador
Escrevendo queries rápidas no SQL Server
Dirceu Resende
MCSA Database Development | BI Development
https://www.dirceuresende.com/blog
2º Encontro do Grupo SQL Server ES

Mais conteúdo relacionado

Mais procurados

Oracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosOracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosDaniela Macedo
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracleEduardo Lopes
 
Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoHelder Lopes
 
[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQLKingHost - Hospedagem de sites
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersDaniel Maia
 
Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - BackupCaio Lima
 
Sql Server Stored Procedures
Sql Server   Stored ProceduresSql Server   Stored Procedures
Sql Server Stored Proceduresalexdutra
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLDaniel Brandão
 
Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlHelder Lopes
 
ODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaCaio Lima
 
Essbase Series - Questões para Entrevistas
Essbase Series - Questões para EntrevistasEssbase Series - Questões para Entrevistas
Essbase Series - Questões para EntrevistasCaio Lima
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBDDenis Vieira
 
ODI Series - Exportar Tabelas para Arquivo Texto
ODI Series -  Exportar Tabelas para Arquivo TextoODI Series -  Exportar Tabelas para Arquivo Texto
ODI Series - Exportar Tabelas para Arquivo TextoCaio Lima
 
ODI Series - Treinamento
ODI Series - TreinamentoODI Series - Treinamento
ODI Series - TreinamentoCaio Lima
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalhoCaio Lima
 
Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g TI Infnet
 
ODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasCaio Lima
 

Mais procurados (20)

Oracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosOracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de Dados
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
 
Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumo
 
[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggers
 
Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - Backup
 
Sql Server Stored Procedures
Sql Server   Stored ProceduresSql Server   Stored Procedures
Sql Server Stored Procedures
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
 
Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySql
 
ODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração Topologia
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
Essbase Series - Questões para Entrevistas
Essbase Series - Questões para EntrevistasEssbase Series - Questões para Entrevistas
Essbase Series - Questões para Entrevistas
 
SQL Oracle
SQL OracleSQL Oracle
SQL Oracle
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBD
 
ODI Series - Exportar Tabelas para Arquivo Texto
ODI Series -  Exportar Tabelas para Arquivo TextoODI Series -  Exportar Tabelas para Arquivo Texto
ODI Series - Exportar Tabelas para Arquivo Texto
 
Triggers no SQL Server
Triggers no SQL ServerTriggers no SQL Server
Triggers no SQL Server
 
ODI Series - Treinamento
ODI Series - TreinamentoODI Series - Treinamento
ODI Series - Treinamento
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalho
 
Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g
 
ODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasODI SERIES - Melhores Práticas
ODI SERIES - Melhores Práticas
 

Semelhante a SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)

Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisJefferson Martins de Andrade
 
Tuning Banco de Dados
Tuning Banco de DadosTuning Banco de Dados
Tuning Banco de DadosFelipeCaiuby
 
Padrões de Design para MapReduce
Padrões de Design para MapReducePadrões de Design para MapReduce
Padrões de Design para MapReduceKarla Okada
 
Expremendo performance do sql server
Expremendo performance do sql serverExpremendo performance do sql server
Expremendo performance do sql serverFelipe Ferreira
 
MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor MySQL Brasil
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...Fabrício Catae
 
TDC2017 | São Paulo - Trilha BigData How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha BigData How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha BigData How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha BigData How we figured out we had a SRE team at ...tdc-globalcode
 
SQL Server – Performance e Tunning
SQL Server – Performance e TunningSQL Server – Performance e Tunning
SQL Server – Performance e Tunningpt_programar
 
AulaTuningProfCeliniaEquipe_Igor Paula Maisa
AulaTuningProfCeliniaEquipe_Igor Paula MaisaAulaTuningProfCeliniaEquipe_Igor Paula Maisa
AulaTuningProfCeliniaEquipe_Igor Paula MaisaMaísa Brenda
 
5 dicas para estruturar seu teste de performance
5 dicas para estruturar seu teste de performance5 dicas para estruturar seu teste de performance
5 dicas para estruturar seu teste de performanceAriane Izac
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemastaniamaciel
 
O que eu deveria saber antes de testar performance?
O que eu deveria saber antes de testar performance?O que eu deveria saber antes de testar performance?
O que eu deveria saber antes de testar performance?Ariane Izac
 
Como Implementar a Análise de Dados em Tempo Real
Como Implementar a Análise de Dados em Tempo RealComo Implementar a Análise de Dados em Tempo Real
Como Implementar a Análise de Dados em Tempo RealDenodo
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring DatabasesIsmael
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
Caçadores de Mitos: A virtualização dos dados pode sustentar o desempenho com...
Caçadores de Mitos: A virtualização dos dados pode sustentar o desempenho com...Caçadores de Mitos: A virtualização dos dados pode sustentar o desempenho com...
Caçadores de Mitos: A virtualização dos dados pode sustentar o desempenho com...Denodo
 

Semelhante a SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning) (20)

Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | Florianópolis
 
Tuning Banco de Dados
Tuning Banco de DadosTuning Banco de Dados
Tuning Banco de Dados
 
Padrões de Design para MapReduce
Padrões de Design para MapReducePadrões de Design para MapReduce
Padrões de Design para MapReduce
 
Expremendo performance do sql server
Expremendo performance do sql serverExpremendo performance do sql server
Expremendo performance do sql server
 
MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor MySQL Profiling com Enterprise Monitor
MySQL Profiling com Enterprise Monitor
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
 
Bi sobre Big Data - Como fazer?
Bi sobre Big Data - Como fazer?Bi sobre Big Data - Como fazer?
Bi sobre Big Data - Como fazer?
 
SQL Tuning Intro
SQL Tuning IntroSQL Tuning Intro
SQL Tuning Intro
 
TDC2017 | São Paulo - Trilha BigData How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha BigData How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha BigData How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha BigData How we figured out we had a SRE team at ...
 
SQL Server – Performance e Tunning
SQL Server – Performance e TunningSQL Server – Performance e Tunning
SQL Server – Performance e Tunning
 
AulaTuningProfCeliniaEquipe_Igor Paula Maisa
AulaTuningProfCeliniaEquipe_Igor Paula MaisaAulaTuningProfCeliniaEquipe_Igor Paula Maisa
AulaTuningProfCeliniaEquipe_Igor Paula Maisa
 
5 dicas para estruturar seu teste de performance
5 dicas para estruturar seu teste de performance5 dicas para estruturar seu teste de performance
5 dicas para estruturar seu teste de performance
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 
Sql Server
Sql ServerSql Server
Sql Server
 
O que eu deveria saber antes de testar performance?
O que eu deveria saber antes de testar performance?O que eu deveria saber antes de testar performance?
O que eu deveria saber antes de testar performance?
 
Como Implementar a Análise de Dados em Tempo Real
Como Implementar a Análise de Dados em Tempo RealComo Implementar a Análise de Dados em Tempo Real
Como Implementar a Análise de Dados em Tempo Real
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring Databases
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
Caçadores de Mitos: A virtualização dos dados pode sustentar o desempenho com...
Caçadores de Mitos: A virtualização dos dados pode sustentar o desempenho com...Caçadores de Mitos: A virtualização dos dados pode sustentar o desempenho com...
Caçadores de Mitos: A virtualização dos dados pode sustentar o desempenho com...
 

Mais de Dirceu Resende

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
Tipos de licenciamento do Power BI - Como o Power BI Embedded e o Microsoft F...
Tipos de licenciamento do Power BI - Como o Power BI Embedded e o Microsoft F...Tipos de licenciamento do Power BI - Como o Power BI Embedded e o Microsoft F...
Tipos de licenciamento do Power BI - Como o Power BI Embedded e o Microsoft F...Dirceu Resende
 
Power Tuning - Portfolio de BI
Power Tuning - Portfolio de BIPower Tuning - Portfolio de BI
Power Tuning - Portfolio de BIDirceu Resende
 
Quero trabalhar na área de dados. Por onde começar?
Quero trabalhar na área de dados. Por onde começar?Quero trabalhar na área de dados. Por onde começar?
Quero trabalhar na área de dados. Por onde começar?Dirceu Resende
 
Analisando grandes volumes de dados com o Power BI
Analisando grandes volumes de dados com o Power BIAnalisando grandes volumes de dados com o Power BI
Analisando grandes volumes de dados com o Power BIDirceu Resende
 
Power BI + Analysis Services - Analisando grandes volumes de dados
Power BI + Analysis Services - Analisando grandes volumes de dadosPower BI + Analysis Services - Analisando grandes volumes de dados
Power BI + Analysis Services - Analisando grandes volumes de dadosDirceu Resende
 
Power BI: DirectQuery, Live Connection e Import
Power BI: DirectQuery, Live Connection e ImportPower BI: DirectQuery, Live Connection e Import
Power BI: DirectQuery, Live Connection e ImportDirceu Resende
 
Power BI Report Server - A solução definitiva de BI e visualização de dados p...
Power BI Report Server - A solução definitiva de BI e visualização de dados p...Power BI Report Server - A solução definitiva de BI e visualização de dados p...
Power BI Report Server - A solução definitiva de BI e visualização de dados p...Dirceu Resende
 
Monitorando seu ambiente SQL server com o Power BI
Monitorando seu ambiente SQL server com o Power BIMonitorando seu ambiente SQL server com o Power BI
Monitorando seu ambiente SQL server com o Power BIDirceu Resende
 
SQLCLR - Transformando seu SQL Server em algo muito além de um banco de dados
SQLCLR - Transformando seu SQL Server em algo muito além de um banco de dadosSQLCLR - Transformando seu SQL Server em algo muito além de um banco de dados
SQLCLR - Transformando seu SQL Server em algo muito além de um banco de dadosDirceu Resende
 
SQL Saturday #844 - Belo Horizonte - Segurança no SQL Server: Você está deixa...
SQL Saturday #844 - Belo Horizonte - Segurança no SQL Server: Você está deixa...SQL Saturday #844 - Belo Horizonte - Segurança no SQL Server: Você está deixa...
SQL Saturday #844 - Belo Horizonte - Segurança no SQL Server: Você está deixa...Dirceu Resende
 
Power BI e Azure = Analisando dados em tempo real
Power BI e Azure = Analisando dados em tempo realPower BI e Azure = Analisando dados em tempo real
Power BI e Azure = Analisando dados em tempo realDirceu Resende
 
Power BI RoadShow #5 - Vila Velha/ES - Azure e Power BI
Power BI RoadShow #5 - Vila Velha/ES - Azure e Power BIPower BI RoadShow #5 - Vila Velha/ES - Azure e Power BI
Power BI RoadShow #5 - Vila Velha/ES - Azure e Power BIDirceu Resende
 
Webinar - Certificações Microsoft na área de dados (Data Platform)
Webinar - Certificações Microsoft na área de dados (Data Platform)Webinar - Certificações Microsoft na área de dados (Data Platform)
Webinar - Certificações Microsoft na área de dados (Data Platform)Dirceu Resende
 
1º Meetup SQL Server na Microsoft - O DBA moderno e automatizado
1º Meetup SQL Server na Microsoft - O DBA moderno e automatizado1º Meetup SQL Server na Microsoft - O DBA moderno e automatizado
1º Meetup SQL Server na Microsoft - O DBA moderno e automatizadoDirceu Resende
 
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dadosSQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dadosDirceu Resende
 
SQL Server 2017 - Novos recursos e funcionalidades
SQL Server 2017 - Novos recursos e funcionalidadesSQL Server 2017 - Novos recursos e funcionalidades
SQL Server 2017 - Novos recursos e funcionalidadesDirceu Resende
 

Mais de Dirceu Resende (20)

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Tipos de licenciamento do Power BI - Como o Power BI Embedded e o Microsoft F...
Tipos de licenciamento do Power BI - Como o Power BI Embedded e o Microsoft F...Tipos de licenciamento do Power BI - Como o Power BI Embedded e o Microsoft F...
Tipos de licenciamento do Power BI - Como o Power BI Embedded e o Microsoft F...
 
Power Tuning - Portfolio de BI
Power Tuning - Portfolio de BIPower Tuning - Portfolio de BI
Power Tuning - Portfolio de BI
 
REVISAO-DP-900-V2
REVISAO-DP-900-V2REVISAO-DP-900-V2
REVISAO-DP-900-V2
 
Quero trabalhar na área de dados. Por onde começar?
Quero trabalhar na área de dados. Por onde começar?Quero trabalhar na área de dados. Por onde começar?
Quero trabalhar na área de dados. Por onde começar?
 
Analisando grandes volumes de dados com o Power BI
Analisando grandes volumes de dados com o Power BIAnalisando grandes volumes de dados com o Power BI
Analisando grandes volumes de dados com o Power BI
 
Power BI + Analysis Services - Analisando grandes volumes de dados
Power BI + Analysis Services - Analisando grandes volumes de dadosPower BI + Analysis Services - Analisando grandes volumes de dados
Power BI + Analysis Services - Analisando grandes volumes de dados
 
Power BI: DirectQuery, Live Connection e Import
Power BI: DirectQuery, Live Connection e ImportPower BI: DirectQuery, Live Connection e Import
Power BI: DirectQuery, Live Connection e Import
 
Power BI Report Server - A solução definitiva de BI e visualização de dados p...
Power BI Report Server - A solução definitiva de BI e visualização de dados p...Power BI Report Server - A solução definitiva de BI e visualização de dados p...
Power BI Report Server - A solução definitiva de BI e visualização de dados p...
 
Monitorando seu ambiente SQL server com o Power BI
Monitorando seu ambiente SQL server com o Power BIMonitorando seu ambiente SQL server com o Power BI
Monitorando seu ambiente SQL server com o Power BI
 
SQLCLR - Transformando seu SQL Server em algo muito além de um banco de dados
SQLCLR - Transformando seu SQL Server em algo muito além de um banco de dadosSQLCLR - Transformando seu SQL Server em algo muito além de um banco de dados
SQLCLR - Transformando seu SQL Server em algo muito além de um banco de dados
 
SQL Saturday #844 - Belo Horizonte - Segurança no SQL Server: Você está deixa...
SQL Saturday #844 - Belo Horizonte - Segurança no SQL Server: Você está deixa...SQL Saturday #844 - Belo Horizonte - Segurança no SQL Server: Você está deixa...
SQL Saturday #844 - Belo Horizonte - Segurança no SQL Server: Você está deixa...
 
Power BI e Azure = Analisando dados em tempo real
Power BI e Azure = Analisando dados em tempo realPower BI e Azure = Analisando dados em tempo real
Power BI e Azure = Analisando dados em tempo real
 
Power BI RoadShow #5 - Vila Velha/ES - Azure e Power BI
Power BI RoadShow #5 - Vila Velha/ES - Azure e Power BIPower BI RoadShow #5 - Vila Velha/ES - Azure e Power BI
Power BI RoadShow #5 - Vila Velha/ES - Azure e Power BI
 
Webinar - Certificações Microsoft na área de dados (Data Platform)
Webinar - Certificações Microsoft na área de dados (Data Platform)Webinar - Certificações Microsoft na área de dados (Data Platform)
Webinar - Certificações Microsoft na área de dados (Data Platform)
 
1º Meetup SQL Server na Microsoft - O DBA moderno e automatizado
1º Meetup SQL Server na Microsoft - O DBA moderno e automatizado1º Meetup SQL Server na Microsoft - O DBA moderno e automatizado
1º Meetup SQL Server na Microsoft - O DBA moderno e automatizado
 
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dadosSQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
SQLCLR: Transformando o SQL Server em algo muito além de um banco de dados
 
SQL Server 2017 - Novos recursos e funcionalidades
SQL Server 2017 - Novos recursos e funcionalidadesSQL Server 2017 - Novos recursos e funcionalidades
SQL Server 2017 - Novos recursos e funcionalidades
 

SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)

  • 1. Escrevendo queries rápidas no SQL Server Dirceu Resende MCSA Database Development | BI Development https://www.dirceuresende.com/blog 2º Encontro do Grupo SQL Server ES
  • 3. Agenda • Apresentação • Por quê Performance Tuning é tão importante ? • Índice? O que é isso ? Para que serve? Onde vive? • Conhecendo o seu novo melhor amigo: Plano de execução • Dicas de Query Tuning
  • 4. Performance Tuning – Porquê? • “No mundo atual, a maioria das pessoas não tem paciência para esperar um site carregar por muito tempo e acabam entrando em outro logo em seguida.” (escoladomarketingdigital.com.br) • “Em média, usuários deixam qualquer site se ele não carregar no celular dentro de três segundos” (Google) • Um dos maiores motivos para o fracasso do Windows Vista foi o fato de ser um sistema extremamente pesado e lento (tecnoblog.net)
  • 5. Performance Tuning – Porquê? • “O tablet TouchPad, da HP, foi um dos lançamentos mais esperados de 2011 - e logo se converteu no maior fracasso do ano. O aparelho, criado para concorrer com o iPad, da Apple, durou apenas sete semanas no mercado antes de a HP tomar a decisão de acabar com ele, citando como motivo as vendas fracas. O motivo? Os consumidores reconheceram imediatamente que o celular era lento demais” (estadao.com.br) • “55% dos estudantes do Canadá admitem se estressarem por computadores lentos, na síndrome da ampulheta (Hourglass Syndrome).” (nytimes.com) • “66% dos americanos são estressados por computadores lentos e 23% se descrevem como muito estressados por conta disso.” (reuters.com)
  • 6. Performance Tuning – Porquê? • Como você acha que seus usuários se comportam quando o seu sistema demora 10 segundos pra retornar uma informação?
  • 7. Performance Tuning – Por onde começar ? • Entender o problema • Elaborar o diagnóstico • Aplicar dicas e técnicas de otimização • Testes, Testes, Testes e depois, mais Testes! • Aplicar a otimização
  • 8. Performance Tuning – Índices • Estrutura em disco associada a uma tabela ou view, que agiliza a recuperação das linhas ordenando os dados (Quicksort). • Analogia: Índice ou sumário de um livro • Índices ocupam espaço em disco. Se você cria muitos índices, eles podem ocupar mais espaço que a própria tabela. • Índices agilizam as consultas, mas deixam as operações de escritas mais lentas (INSERT, UPDATE, DELETE), porque elas precisam atualizar a tabela e todos os índices relacionados. CUIDADO!
  • 9. Performance Tuning – Índices • Índice Clustered x NonClustered. • Índice Composto x com INCLUDE. • Índices Únicos. • Covering Index. • Missing Index (sys.dm_db_missing_index_groups sys.dm_db_missing_index_group_stats e sys.dm_db_missing_index_details).
  • 10. Performance Tuning – Índices • Fillfactor • Fragmentação (sys.dm_db_index_physical_stats) • REORGANIZE x REBUILD. • Verificar a utilização dos índices (sys.dm_db_index_usage_stats) • Histograma (DBCC SHOW_STATISTICS(Nome_da_Tabela, Nome_do_Indice))
  • 11. Performance Tuning – Índices • Recomendações para criação de índice  Covering Index  Colunas computadas  Foreign Keys são bons candidatos  Tabelas com muitas escritas e poucas leituras não são boas opções (Ex: tabela de logs)  Bons índices são criados a partir de análises de como e quão frequente os dados são acessados
  • 12. Performance Tuning – O Plano de Execução • Ferramenta gráfica para auxiliar do DBA/Desenvolvedor a entender como as consultas estão sendo realizadas no banco e interpretadas pelo otimizador de consultas.
  • 13. Performance Tuning – O Plano de Execução • O que podemos extrair de um plano? 1. Está utilizando índice? 2. Qual índice foi utilizado? 3. Trabalho paralelizado? 4. Qual o volume dos dados? 5. Qual a operação de maior custo? 6. Qual o operador que foi utilizado?
  • 14. Performance Tuning – O Plano de Execução • Como fazemos a leitura de um plano?
  • 15. Performance Tuning – O Plano de Execução • Setas indicam volume de registros processados
  • 16. Performance Tuning – O Plano de Execução • Percentual do custo de cada operação
  • 17. Performance Tuning – O Plano de Execução • Informações detalhadas através de ToolTips
  • 18. Performance Tuning – O Plano de Execução • Sugestão de índices
  • 19. Performance Tuning – O Plano de Execução • Tipos de plano de execução Estimado Atual • Útil para desenvolvimento, onde não pode executar a consulta • Não funciona com objetos temporários • Não identifica alguns warnings • Não é apurado para desenvolvimento • Baseado nas estatísticas • Demonstra o que foi executado
  • 20. Performance Tuning – O Plano de Execução • Tipos de operadores: Table Scan  Acontece em tabela sem índice cluster  Em geral, operação de alto custo
  • 21. Performance Tuning – O Plano de Execução • Tipos de operadores: Clustered Index Scan
  • 22. Performance Tuning – O Plano de Execução • Tipos de operadores: Clustered Index Seek
  • 23. Performance Tuning – O Plano de Execução • Tipos de operadores: Lookup
  • 24. Performance Tuning – O Plano de Execução • Tipos de operadores: Key Lookup
  • 25. Performance Tuning – O Plano de Execução • Tipos de operadores: RID Lookup
  • 26. Performance Tuning – O Plano de Execução • Tipos de operadores: Sort  Processamento linha a linha  ORDER BY ou DISTINCT
  • 27. Performance Tuning – O Plano de Execução • Tipos de operadores: Stream Aggregate  Consultas com agrupamento (GROUP BY, DISTINCT, etc)
  • 28. Performance Tuning – O Plano de Execução • Tipos de operadores: Compute Scalar  Consulta com expressões, cálculos ou conversões
  • 29. Performance Tuning – O Plano de Execução • Tipos de operadores: Nested Loops  Algoritmo muito eficiente  Cenários com poucos registros  Para cada linha da outer table, varre todas na inner table.  Baixo consumo de CPU e memória
  • 30. Performance Tuning – O Plano de Execução • Tipos de operadores: Nested Loops for each row R1 in the outer table for each row R2 in the inner table if R1 joins with R2 return (R1, R2)
  • 31. Performance Tuning – O Plano de Execução • Tipos de operadores: Merge Join  Eficiente, mas precisa de dados ordenados  Cenários com muitos registros
  • 32. Performance Tuning – O Plano de Execução • Tipos de operadores: Merge Join  Se os dados não estiverem ordenados o Merge Join pode requerer a ordenação através de um Sort Merge Join  Se ambas tabelas não tiverem índice único, ocorre merge Join Many to Many – tabelas sem PK, utiliza tempdb, menos eficiente  Merge Join e seu impacto na TEMPDB  Em geral consome pouca CPU e memória. Encontrado com frequência em consultas com covering indexes.
  • 33. Performance Tuning – O Plano de Execução • Tipos de operadores: Merge Join get first row R1 from input 1 get first row R2 from input 2 while not at the end of either input begin if R1 joins with R2 begin return (R1, R2) get next row R2 from input 2 end else if R1 < R2 get next row R1 from input 1 else get next row R2 from input 2 end
  • 34. Performance Tuning – O Plano de Execução • Troubleshooting • LOOKUP: Covering index ou INCLUDE  Index Scan pode ser reflexo de um Lookup caro • Conversões: Impacto de conversões na cláusula WHERE • Estatísticas: Número estimado <> número atual
  • 35. Performance Tuning – O Plano de Execução • Troubleshooting - Parameter sniffing • Plano reutilizado não é adequado  Criar procedures diferentes  Adicionar cláusula WITH RECOMPILE  Hint OPTION (RECOMPILE) • DMVs para acessar plan cache:  sys.dm_exec_cached_plans  sys.dm_exec_sql_text(plan_handle)  sys.dm_exec_query_plan(plan_handle)
  • 36. Performance Tuning – Query Tuning • Dicas para otimização de consultas SQL • Grande parte dos problemas de performance de uma aplicação estão relacionados a problemas de consultas SQL mal escritas. • Técnicas para melhorar a utilização dos índices de consultas lentas • Não tem “receita de bolo”!
  • 37. Performance Tuning – Query Tuning • Utilização de índices SARGABLE Non-SARGABLE = <> > IN < OR >= NOT IN >= NOT EXISTS BETWEEN NOT LIKE LIKE (sem iniciar com %) LIKE (iniciando com %)
  • 38. Performance Tuning – Query Tuning • Evitar tabelas variáveis
  • 39. Performance Tuning – Query Tuning • Evite recompilações desnecessárias  Uso de uma cláusula WITH RECOMPILE na instrução CREATE PROCEDURE ou EXECUTE  Uso do hint OPTION(RECOMPILE) em um select  Qualquer objeto referenciado é alterado (DROP, CREATE, ALTER), inclusive ao adicionar ou ignorar restrições, parâmetros DEFAULT ou CHECK’s  Executar sp_recompile  Servidor sem espaço no cache  Uma porcentagem suficiente de dados é alterada em uma tabela referenciada pelo procedimento armazenado  A SP intercala as operações DDL (Linguagem de definição de dados) e DML (Linguagem de manipulação de dados)
  • 40. Performance Tuning – Query Tuning • Evite recompilações desnecessárias Sem o hint Com o hint
  • 41. Performance Tuning – Query Tuning • Substituir o uso de NOT IN por NOT EXISTS ou LEFT JOIN em subquery
  • 42. Performance Tuning – Query Tuning • Analisar uso de elementos NON-SARGABLE em cláusulas WHERE
  • 43. Performance Tuning – Query Tuning • Analisar o uso de DISTINCT e ORDER BY  Operações extremamente pesadas  Os dados não podem ser ordenados na aplicação ?  Os dados realmente precisam ser ordenados em cada tabela temporária?  DISTINCT é muito usado para mascarar erros em JOINs
  • 44. Performance Tuning – Query Tuning • Evitar o hint OPTION(MAXDOP 1) Com OPTION(MAXDOP 1) Sem OPTION(MAXDOP 1)
  • 45. Performance Tuning – Query Tuning • Evitar o uso de JOIN com LinkedServer
  • 46. Performance Tuning – Query Tuning • Evitar o uso de JOIN com LinkedServer
  • 47. Performance Tuning – Query Tuning • Evitar o uso das funções LEFT() e SUBSTRING(Texto, 1, X) na cláusula WHERE  Funções não são SARGABLE  A mesma coisa NÃO acontece com LIKE ‘%String’
  • 48. Performance Tuning – Query Tuning • Colunas computadas são indexáveis!
  • 49. Performance Tuning – Query Tuning • Evite utilizar funções UDF (quando possível)  Operações extremamente pesadas  Mesma lógica, mas com performances diferentes
  • 50. Performance Tuning – Query Tuning • Considere substituir funções UDF por funções CLR
  • 51. Performance Tuning – Query Tuning • Analise os tipos de dados das colunas que são comparadas (Conversão)  Coluna numérica: Coluna = valor ou Coluna = @variavel_numerica  Coluna alfanumérica: Coluna = ‘valor’ ou coluna = @variavel_alfanumerica
  • 52. Performance Tuning – Query Tuning • Reescreva as regras de negócio da consulta  Difícil de implementar  Requer conhecimento da área de negócio e talvez, envolvimento da equipe de desenvolvimento  Não depende apenas do DBA  Verificar JOINS e colunas não utilizadas  Muitas vezes, o problema está na lógica da query
  • 53. Próximos Encontros • 24/06 - SQL Saturday Caxias do Sul • 05/08 - 3º Encontro do SQL Server ES • 19/08 - SQL Saturday Brasílila • 23/09 - 4º Encontro do SQL Server ES • 30/09 - SQL Saturday São Paulo • 21/10 - SQL Saturday Rio de Janeiro • 18/11 - SQL Saturday Salvador
  • 54. Escrevendo queries rápidas no SQL Server Dirceu Resende MCSA Database Development | BI Development https://www.dirceuresende.com/blog 2º Encontro do Grupo SQL Server ES