Top Banner
Globalcode – Open4education As boas praticas de programação para SQL Server Marcelo Fernandes MVP - MCDBA – MCSA – MCTS – MCITP – MCT - MTA E-mail: [email protected] Twitter: @marcelodba
26
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tdc2015

Globalcode – Open4education

As boas praticas de programação para SQL Server

Marcelo FernandesMVP - MCDBA – MCSA – MCTS – MCITP – MCT - MTA E-mail: [email protected] Twitter: @marcelodba

Page 2: Tdc2015

Globalcode – Open4education

Begin Transaction

SP_WHOEspecialista 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

Bloghttp://marcelodba.wordpress.com

https://www.mcdbabrasil.com.br

Contatos@marcelodba

[email protected]

Page 3: Tdc2015

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

Page 4: Tdc2015

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. Requestcreates 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

Page 5: Tdc2015

Globalcode – Open4education

Estrutura de Índices e Tabelas

Heaps

Page 6: Tdc2015

Globalcode – Open4education

Estrutura de Índices e Tabelas

Clustered Tables

Page 7: Tdc2015

Globalcode – Open4education

Estrutura de Índices e Tabelas

Nonclustered Indexes

Page 8: Tdc2015

Globalcode – Open4education

Estatísticas

Conceitos de EstatísticasEstatí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ísticasCardinalidade (ajuda a calcular a quantidade de linhas)

Densidade (ajuda a entender quantos valores únicos existem)

Seletividade (ajuda a entender quantos registros atendem a busca)

Page 9: Tdc2015

Globalcode – Open4education

Planos de Execução

Qual a importância ?

REQUISIÇÃO / QUERY

DADOS

Page 10: Tdc2015

Globalcode – Open4education

Planos de Execução

Exemplos

Page 11: Tdc2015

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 !!!!!

Page 12: Tdc2015

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

Page 13: Tdc2015

Globalcode – Open4education

Bloqueios e Concorrência

Modos de Bloqueio Compartilhado – (SH) Exclusivo – (EX) Atualização – (U)

Tipos de Bloqueio Linha Página Tabela

Page 14: Tdc2015

Globalcode – Open4education

Bloqueios e Concorrência

Niveis de IsolamentoNíveis de Isolamento de transação

Read Commited.

Read Uncommited.

Repeatable Read.

Read Serializable.

Snapshot.

Page 15: Tdc2015

Globalcode – Open4education

Bloqueios e Concorrência

Niveis de IsolamentoNí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

Page 16: Tdc2015

Globalcode – Open4education

Bloqueios e Concorrência

Níveis de Isolamento de transação

Read Commited.

Read Uncommited.

Repeatable Read.

Read Serializable.

Snapshot.

Linha ALinha BLinha C

Linha ALinha BLinha C

Linha XLinha YLinha Z

Niveis de Isolamento

Linha DLinha ELinha F

Page 17: Tdc2015

Globalcode – Open4education

Boas Práticas de Desenvolvimento

NolockEvite o uso do NOLOCK !!!!

Page 18: Tdc2015

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

Page 19: Tdc2015

Globalcode – Open4education

Boas Práticas de Desenvolvimento

Uso do AsteriscoDificuldade 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

Page 20: Tdc2015

Globalcode – Open4education

Boas Práticas de Desenvolvimento

Search Arguments (SARG)

WHERE Nome = 'José'WHERE Salario > 2500WHERE 2500 < SalarioWHERE Nome = 'José' AND Salario > 5000WHERE Nome LIKE 'Fab%'

WHERE Nome LIKE ‘%Fab'WHERE ABS(Preco) > 100WHERE dbo.FnMask(Col) = ’10.330’WHERE YEAR(Data) = 2011

By Fabiano Amorim

Page 21: Tdc2015

Globalcode – Open4education

Boas Práticas de Desenvolvimento

Exemplos encontrados

POR ESTE:

ESTE CÓDIGO:

Page 22: Tdc2015

Globalcode – Open4education

Boas Práticas de Desenvolvimento

Exemplos nonSARGS

SELECT ... FROM ... WHERE Year(myDate) = 2008WHERE 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()) >= 30Select ... WHERE OrderDate < DateAdd(mm,-30,GetDate())

Page 23: Tdc2015

Globalcode – Open4education

Boas Práticas de Desenvolvimento

Exemplos encontrados

POR ESTE:

ESTE CÓDIGO:

Page 24: Tdc2015

Globalcode – Open4education

SP_HELP

Dúvidas?

Page 25: Tdc2015

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 tabelahttps://technet.microsoft.com/pt-br/library/ms180978(v=sql.105).aspx

Blog do Cataehttp://blogs.msdn.com/b/fcatae/archive/2010/10/05/como-usar-select-with-nolock-para-melhorar-a-performance.aspx

Blog do Fabiano Amorimhttp://blogfabiano.com/

Page 26: Tdc2015

Globalcode – Open4education

COMMIT

Obrigado!!!

Marcelo FernandesBlog - http://marcelodba.wordpress.comE-mail - [email protected] - @marcelodba