SlideShare uma empresa Scribd logo
1 de 29
NOME DA APRESENTAÇÃO
Nome (Nick no Fórum)
25 DE MAIO @MICROSOFT
SQL Server – Performance e Tunning
Pedro Martins (Rechousa)
Agenda
Principais problemas
Planos de Execução
Índices
Otimização de Stored Procedures
# 2
Principaisproblemas
# 3
61%
Fonte:
Fritchey, G. (2012). SQL Server 2012 Query Performance Tuning (3rd ed.). Apress.
Workflow paraotimização
Fonte:
Fritchey, G. (2012). SQL Server 2012 Query Performance Tuning (3rd ed.). Apress.
# 4
DEMONSTRAÇÃO
Planos de execução
PerformanceKillers
# 6
• Má indexação;
• Estatísticas desatualizadas;
• Queries não otimizadas;
• Planos de execução não reutilizados ou não otimizados;
• Demasiados locks e deadlocks;
• Fraco design da BD;
• Excessiva fragmentação;
• Constante recompilação de queries;
• Uso de cursores de forma imprópria;
• Configuração errada do LOG;
• Uso excessivo da tempdb;
Subsistemade Storage
# 7
• Planos de execução:
• Estatísticas desatualizadas;
• Alterações de código;
• Indexing (table scans vs index seeks);
• Índices repetidos / desnecessários;
• CDC (Change Data Capture);
• Snapshot isolation;
• Reduzida RAM do servidor;
Tipos de Índices
# 8
• Clustered;
• Nonclustered;
• Unique
• Columnstore *
• Index with included columns
• Index on computed columns *
• Filtered
• Spatial
• XML
• Full-text
Pagese Extents
# 9
Página = 8k
Extent = 8 Páginas
Tipos de página:
• Dados;
• Índices;
• BLOB’s;
• etc;
Clusteredvs Nonclustered
# 10
Clustered:
• Dados gravados ordenados;
• Máximo de um por tabela;
• Estrutura B-Tree;
Nonclustered:
• Índices criados externamente;
• Máximo 999;
• Lista ordenada com apontador;
DEMONSTRAÇÃO
Clustered e Nonclustered
Demasiadosíndices
# 12
• Consumo de espaço desnecessário;
• Queries podem usar índices de forma menos
eficiente;
• Plano de execução menos eficiente;
• Degradação da performance;
• Confusão na manutenção da BD;
DEMONSTRAÇÃO
Over indexing
Índicesduplicados
# 14
• Reduzem a performance de INSERT, UPDATE e
DELETE
• Sem vantagens para SELECT;
• Consumo de espaço desnecessário;
DEMONSTRAÇÃO
Duplicate indexing
Otimizações
# 16
• Devem ser executadas num horário off peak;
• Evitar DBCC SHRINKDB – aumenta
fragmentação;
• Selecionar o fill-factor apropriado pode reduzir a
fragmentação;
• Clustered indexes devem ser criados em colunas
cujos valores são únicos e incrementais, de
forma a evitar a fragmentação;
• Desativar Boost SQL Server priority;
• Separar ficheiros de Dados e Logs em diferentes
partições;
Otimizações: ClusteredIndexes
# 17
• Determinam a ordem física de como os dados
são gravados fisicamente;
• Aumento de performance em colunas:
• com muitos valores distintos;
• que são acedidas frequentemente;
• com pesquisas de intervalos de valores;
• que retornam muitos dados;
Nota:
Primary keys criam automaticamente clustered
indexes;
DEMONSTRAÇÃO
Clustered
Otimizações: remover índicesduplicados
# 19
• Identificar os índices duplicados;
• Removê-los!
DEMONSTRAÇÃO
Identificar e remover índices duplicados
Otimizações: desfragmentaríndices
# 21
• Fragmentação reduz a performance;
• A desfragmentação de índices é uma essencial
tarefa de manutenção;
• Recomendado:
• Reorganizar se fragmentação entre 10% e 30%
• Reconstruir se fragmentação superior a 30%
DEMONSTRAÇÃO
Fragmentação de índices
Checklist
# 23
• Verificar índices excessivos;
• Criar índices para queries mais críticas;
• Verificar planos de manutenção:
• Rebuild e Reorganize;
• Update Statistics;
• Retornar apenas as colunas necessárias;
• Usar SET NOCOUNT ON;
• Particionar tabelas com muitos dados;
• Reduzir a utilização da TempDB;
• Criar índices COLUMNSTORE para soluções de
data warehousing;
TableValue Parameters
# 24
• Permitem o envio de parâmetros que contêm uma
estrutura “do tipo tabela”;
• Requerem a criação de um User defined Table Type;
• O parâmetro a receber tem de ser READONLY;
DEMONSTRAÇÃO
TVP + MERGE
Dúvidas / Questões ?
Obrigado !
Pedro Martins
rechousa@gmail.com
http://www.linkedin.com/in/rechousa
Patrocinador Gold
Patrocinadores Silver
Media Partners

Mais conteúdo relacionado

Semelhante a SQL Server – Performance e Tunning

24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhoresRodrigo Crespi
 
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
 
Expremendo performance do sql server
Expremendo performance do sql serverExpremendo performance do sql server
Expremendo performance do sql serverFelipe Ferreira
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle MonteiroiMasters
 
Modulo-02-Aula-03-conteudo-para-cer.pptx
Modulo-02-Aula-03-conteudo-para-cer.pptxModulo-02-Aula-03-conteudo-para-cer.pptx
Modulo-02-Aula-03-conteudo-para-cer.pptxAugustoNicolau2
 
5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql server5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql serverMarcos Freccia
 
Modulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxModulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxAugustoNicolau2
 
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
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDenis Vieira
 
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server Marcos Freccia
 
Refactoring Databases - parte 1
Refactoring Databases - parte 1Refactoring Databases - parte 1
Refactoring Databases - parte 1Ismael
 
Fazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFabio Telles Rodriguez
 
Padrões de Design para MapReduce
Padrões de Design para MapReducePadrões de Design para MapReduce
Padrões de Design para MapReduceKarla Okada
 
Tuning Banco de Dados
Tuning Banco de DadosTuning Banco de Dados
Tuning Banco de DadosFelipeCaiuby
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFabio Telles Rodriguez
 

Semelhante a SQL Server – Performance e Tunning (20)

24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
 
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
 
Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016
 
Expremendo performance do sql server
Expremendo performance do sql serverExpremendo performance do sql server
Expremendo performance do sql server
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Modulo-02-Aula-03-conteudo-para-cer.pptx
Modulo-02-Aula-03-conteudo-para-cer.pptxModulo-02-Aula-03-conteudo-para-cer.pptx
Modulo-02-Aula-03-conteudo-para-cer.pptx
 
5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql server5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql server
 
Modulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxModulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptx
 
SQL Oracle
SQL OracleSQL Oracle
SQL Oracle
 
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
 
Aula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLiteAula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLite
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full Javascript
 
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
 
Refactoring Databases - parte 1
Refactoring Databases - parte 1Refactoring Databases - parte 1
Refactoring Databases - parte 1
 
Fazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISLFazendo Um Elefante Passar Debaixo da Porta - FISL
Fazendo Um Elefante Passar Debaixo da Porta - FISL
 
Pgbr2013
Pgbr2013Pgbr2013
Pgbr2013
 
Padrões de Design para MapReduce
Padrões de Design para MapReducePadrões de Design para MapReduce
Padrões de Design para MapReduce
 
BD I - Aula 07 A - Projetando BD
BD I - Aula 07 A - Projetando BDBD I - Aula 07 A - Projetando BD
BD I - Aula 07 A - Projetando BD
 
Tuning Banco de Dados
Tuning Banco de DadosTuning Banco de Dados
Tuning Banco de Dados
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
 

Mais de pt_programar

O desenvolvimento de aplicações móveis, antes da 1ª linha de código
O desenvolvimento de aplicações móveis, antes da 1ª linha de códigoO desenvolvimento de aplicações móveis, antes da 1ª linha de código
O desenvolvimento de aplicações móveis, antes da 1ª linha de códigopt_programar
 
Empreendedorismo em TI
Empreendedorismo em TIEmpreendedorismo em TI
Empreendedorismo em TIpt_programar
 
Conquistar o mundo com aplicações feitas à velocidade da luz
Conquistar o mundo com aplicações feitas à velocidade da luzConquistar o mundo com aplicações feitas à velocidade da luz
Conquistar o mundo com aplicações feitas à velocidade da luzpt_programar
 
DMVs - Conhece o teu SQL Server
DMVs - Conhece o teu SQL ServerDMVs - Conhece o teu SQL Server
DMVs - Conhece o teu SQL Serverpt_programar
 
Workshop web realtime
Workshop web realtimeWorkshop web realtime
Workshop web realtimept_programar
 
SEO – A importância do Search Engine Optimization
SEO – A importância do Search Engine OptimizationSEO – A importância do Search Engine Optimization
SEO – A importância do Search Engine Optimizationpt_programar
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7pt_programar
 
Powershell “à minha maneira”
Powershell “à minha maneira”Powershell “à minha maneira”
Powershell “à minha maneira”pt_programar
 
Apresentação Comunidade & Evento PROGRAMAR 2013
Apresentação Comunidade & Evento PROGRAMAR 2013Apresentação Comunidade & Evento PROGRAMAR 2013
Apresentação Comunidade & Evento PROGRAMAR 2013pt_programar
 
As novidades do C# 5.0
As novidades do C# 5.0As novidades do C# 5.0
As novidades do C# 5.0pt_programar
 
HTML5 e CSS3 – rápido e eficaz para o presente
HTML5 e CSS3 – rápido e eficaz para o presenteHTML5 e CSS3 – rápido e eficaz para o presente
HTML5 e CSS3 – rápido e eficaz para o presentept_programar
 

Mais de pt_programar (11)

O desenvolvimento de aplicações móveis, antes da 1ª linha de código
O desenvolvimento de aplicações móveis, antes da 1ª linha de códigoO desenvolvimento de aplicações móveis, antes da 1ª linha de código
O desenvolvimento de aplicações móveis, antes da 1ª linha de código
 
Empreendedorismo em TI
Empreendedorismo em TIEmpreendedorismo em TI
Empreendedorismo em TI
 
Conquistar o mundo com aplicações feitas à velocidade da luz
Conquistar o mundo com aplicações feitas à velocidade da luzConquistar o mundo com aplicações feitas à velocidade da luz
Conquistar o mundo com aplicações feitas à velocidade da luz
 
DMVs - Conhece o teu SQL Server
DMVs - Conhece o teu SQL ServerDMVs - Conhece o teu SQL Server
DMVs - Conhece o teu SQL Server
 
Workshop web realtime
Workshop web realtimeWorkshop web realtime
Workshop web realtime
 
SEO – A importância do Search Engine Optimization
SEO – A importância do Search Engine OptimizationSEO – A importância do Search Engine Optimization
SEO – A importância do Search Engine Optimization
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7
 
Powershell “à minha maneira”
Powershell “à minha maneira”Powershell “à minha maneira”
Powershell “à minha maneira”
 
Apresentação Comunidade & Evento PROGRAMAR 2013
Apresentação Comunidade & Evento PROGRAMAR 2013Apresentação Comunidade & Evento PROGRAMAR 2013
Apresentação Comunidade & Evento PROGRAMAR 2013
 
As novidades do C# 5.0
As novidades do C# 5.0As novidades do C# 5.0
As novidades do C# 5.0
 
HTML5 e CSS3 – rápido e eficaz para o presente
HTML5 e CSS3 – rápido e eficaz para o presenteHTML5 e CSS3 – rápido e eficaz para o presente
HTML5 e CSS3 – rápido e eficaz para o presente
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 

Último (6)

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

SQL Server – Performance e Tunning

Notas do Editor

  1. Identificar bottlenecks, a analisar planos de execução e a performance do SQL Server 2012Comparar os diferentes tipos de índice e como eles podem ajudar a melhorar o desempenho do servidor.Truques em storedprocedures.
  2. Indexaçãoporexcessoouporfalta;Estatísticaserradas = nãootimizaçãopor parte do Query Optimizer;Queries nãootimizadas = rows oucolunasdesnecessárias, queries mal escritas;Planos de execução (parameter sniffing usadopelo Query Otimizerbaseadonasestatísticas)ACID (Atomicidade, Consistência, Isolamento e Durabilidade)Fraco design da BD (Exemplo, BD desnormalizada)Fragmentação leva a PageSplitsRecompilação de queries –parameterizedexecutionplan independente dos parâmetros submetidos;Cursores causam demasiado overhead, usar modo fast-forwardApenas uma Tempb por SQL Server Instance (temporarytables, tablevariables, hashtables em joins, sorts e rowversionamento)
  3. Snapshot isolation = tempdb I/Os + page splitsReduzida RAM do servidor = smaller buffer pool + lazy writer and lazy read;
  4. Clustered: Forma B-TreeComputed Columns: Persisted e DeterministicasSpatial Data: alguns funções de Geometry e Geography;
  5. PageHeader: 96 bytesPágina: 8KVários tipos de página: Dados, Índices, BLOB’s, Diferenças entre páginas desde o último Backup database8páginas = 1 extent
  6. Custered tem o root node (ponto de entrada à tabela), intermediate nodeDados fisicamente gravados de forma ordenada;Por default, a primarykey é um ClusteredIndex se não houver ClusteredIndex na tabela;
  7. Overindexing
  8. Duplicateindexing
  9. Bestpractices:Criar quando necessários;Evitar chaves grandes;Evitar usar em coluna cujos valores mudam frequentemente