O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Tdc2015

1.829 visualizações

Publicada em

PPT used at TDC 2015

Publicada em: Dados e análise
  • Seja o primeiro a comentar

Tdc2015

  1. 1. Globalcode – Open4education As boas praticas de programação para SQL Server Marcelo Fernandes MVP - MCDBA – MCSA – MCTS – MCITP – MCT - MTA E-mail: fernandes_dba@hotmail.com Twitter: @marcelodba
  2. 2. Globalcode – Open4education Begin Transaction SP_WHO Especialista em Banco de Dados Co-autor dos livros: SQL Server 2014: Alta Disp. na Prática com AlwaysOn Failover Cluster Instances SQL Server: Além do conceito SQL Server Blog Post Collection Palestrante Blog http://marcelodba.wordpress.com https://www.mcdbabrasil.com.br Contatos @marcelodba Fernandes_dba@hotmail.com
  3. 3. Globalcode – Open4education Agenda Como o SQL executa uma Query Conceitos de Heaps e Indexação Tipos de Índices Clustered, Nonclusterd Conceito de Estatísticas Conceitos de Plano de Execução Bloqueios e Concorrência SARG - Não SARG
  4. 4. Globalcode – Open4education Como o SQL executa uma Query NETWORK NETWORK Task Task Task Tasks Queue Workers (threadpool) Worker Worker Worker Worker Task Execution Cache Parsing, Compilation, Optimization Query Execution Plan Cache Data Cache (Buffer pool) database 1. Request creates a new Task 2. Idle Worker picks up a pending Task 3. An execution plan is compiled 4. The Query plan is executed. Operators access data through Buffer Pool 5. Result set is returned during execution 6. Task is complete, Worker returns to idle
  5. 5. Globalcode – Open4education Estrutura de Índices e Tabelas Heaps
  6. 6. Globalcode – Open4education Estrutura de Índices e Tabelas Clustered Tables
  7. 7. Globalcode – Open4education Estrutura de Índices e Tabelas Nonclustered Indexes
  8. 8. Globalcode – Open4education Estatísticas Conceitos de Estatísticas Estatísticas são utilizadas pelo query optimizer para determinar a distribuição dos dados de uma colunas São armazenadas separadamente dos dados Precisam ser mantidas Tem três características Cardinalidade (ajuda a calcular a quantidade de linhas) Densidade (ajuda a entender quantos valores únicos existem) Seletividade (ajuda a entender quantos registros atendem a busca)
  9. 9. Globalcode – Open4education Planos de Execução Qual a importância ? REQUISIÇÃO / QUERY DADOS
  10. 10. Globalcode – Open4education Planos de Execução Exemplos
  11. 11. Globalcode – Open4education Planos de Execução Principais atributos de um plano de Execução. Como os dados são acessados Como os dados são agregados nas operações Se está usando objeto temporários Ordenações Estimativa de linhas Paralelismo CUSTO !!!!!
  12. 12. Globalcode – Open4education Planos de Execução Como interpretar um Plano de Execução Tabela 1Tabela 1 Tabela 2Tabela 2 • Resultset 1 and 2 são unidos utilizando um nested loops join, criando o resultset 3 11 22 33 44 • Resultset 3 and 4 são unidos utilizando um hash match join, criando o resultset 5 55 66 • Resultset 5 and 6 são unidos utilizando nested loops join, criando o resultset de retorno
  13. 13. Globalcode – Open4education Bloqueios e Concorrência Modos de Bloqueio Compartilhado – (SH) Exclusivo – (EX) Atualização – (U) Tipos de Bloqueio Linha Página Tabela
  14. 14. Globalcode – Open4education Bloqueios e Concorrência Niveis de Isolamento Níveis de Isolamento de transação  Read Commited.  Read Uncommited.  Repeatable Read.  Read Serializable.  Snapshot.
  15. 15. Globalcode – Open4education Bloqueios e Concorrência Niveis de Isolamento Níveis de Isolamento de transação  Read Commited.  Read Uncommited.  Repeatable Read.  Read Serializable.  Snapshot. Linha 1 Linha 2 Linha 5 Linha 3 Linha 6
  16. 16. Globalcode – Open4education Bloqueios e Concorrência Níveis de Isolamento de transação  Read Commited.  Read Uncommited.  Repeatable Read.  Read Serializable.  Snapshot. Linha A Linha B Linha C Linha A Linha B Linha C Linha X Linha Y Linha Z Niveis de Isolamento Linha D Linha E Linha F
  17. 17. Globalcode – Open4education Boas Práticas de Desenvolvimento Nolock Evite o uso do NOLOCK !!!!
  18. 18. Globalcode – Open4education DEMO • Na sessão 2, o comando SELECT realiza uma operação de leitura de T1 enquanto que, no exato momento, a sessão 1 está apagando o registro de T1. Acessos concorrentes e sem bloqueios! Do ponto de vista do SQL Server, um erro de consistência pode ocorrer a qualquer instante. Qual explicação? • Analisando microscopicamente, o comando SELECT iniciou a operação de Table Scan em T1, realizando a leitura do registro k=0, e depois ficou bloqueado na tabela T2. Antes de avançar na leitura da tabela, uma outra sessão apagou o registro k=0 e liberou o bloqueio em T2. SELECT continua a operação de Table Scan fazendo a leitura a partir do registro k=0 para buscar k=1, mas… cade o registro k=0? Ele foi apagado. Nesse momento, o table scan foi cancelado com o erro 601 – severity 12. NOLOCK: solicitamos que nenhum lock seja obtido na tabela. ALTER DATABASE <Database> SET READ_COMMITTED_SNAPSHOT ON By Fabricio Catae, http://blogs.msdn.com/b/fcatae/archive/2010/04/28/efeitos-colaterais-do-with-nolock-parte-i.aspx
  19. 19. Globalcode – Open4education Boas Práticas de Desenvolvimento Uso do Asterisco Dificuldade no uso de índices, devido a quantidade de informação retornada. Inclusão de novas colunas na tabela podem afetar a aplicação Cláusula ORDER BY Use ORDER BY apenas quando absolutamente necessário. Ao especificar a cláusula ORDER BY, não utilize o número das colunas: -- ORDER BY usando o número da coluna SELECT OrderID, OrderDate FROM Orders ORDER BY 2 -- ORDER BY usando o nome da coluna, mais legível SELECT OrderID, OrderDate FROM Orders ORDER BY OrderDate SELECT * FROM TABELA
  20. 20. Globalcode – Open4education Boas Práticas de Desenvolvimento Search Arguments (SARG) WHERE Nome = 'José' WHERE Salario > 2500 WHERE 2500 < Salario WHERE Nome = 'José' AND Salario > 5000 WHERE Nome LIKE 'Fab%' WHERE Nome LIKE ‘%Fab' WHERE ABS(Preco) > 100 WHERE dbo.FnMask(Col) = ’10.330’ WHERE YEAR(Data) = 2011 By Fabiano Amorim
  21. 21. Globalcode – Open4education Boas Práticas de Desenvolvimento Exemplos encontrados POR ESTE: ESTE CÓDIGO:
  22. 22. Globalcode – Open4education Boas Práticas de Desenvolvimento Exemplos nonSARGS     SELECT ... FROM ... WHERE Year(myDate) = 2008 WHERE myDate >= '01-01-2008' AND myDate < '01-01-2009' Select ... WHERE isNull(FullName,'Ed Jones') = 'Ed Jones' Select ... WHERE ((FullName = 'Ed Jones') OR (FullName IS NULL)) Select ... WHERE SUBSTRING(DealerName,4) = 'Ford' Select ... WHERE DealerName Like 'Ford%' Select ... WHERE DateDiff(mm,OrderDate,GetDate()) >= 30 Select ... WHERE OrderDate < DateAdd(mm,-30,GetDate())
  23. 23. Globalcode – Open4education Boas Práticas de Desenvolvimento Exemplos encontrados POR ESTE: ESTE CÓDIGO:
  24. 24. Globalcode – Open4education SP_HELP Dúvidas?
  25. 25. Globalcode – Open4education Referências Como o SQL Executa uma Query? http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a- query/ Arquitetura de estruturas de dados de índice e tabela https://technet.microsoft.com/pt-br/library/ms180978(v=sql.105).aspx Blog do Catae http://blogs.msdn.com/b/fcatae/archive/2010/10/05/como-usar-select- with-nolock-para-melhorar-a-performance.aspx Blog do Fabiano Amorim http://blogfabiano.com/
  26. 26. Globalcode – Open4education COMMIT Obrigado!!! Marcelo Fernandes Blog - http://marcelodba.wordpress.com E-mail - fernandes_dba@hotmail.com Twitter - @marcelodba

×