Administração de Bases de DadosAfinação da Aplicação  (Desempenho da Aplicação)       Carlos Pampulim Caldeira    http://w...
Optimizador Relacional•   SQL, standard para acesso à informação•   Alto nível de abstracção•   Quais são os dados pretend...
Optimizador Relacional
Optimizador RelacionalAplicações estão isoladas:  • Estrutura (independência Lógica)  • Forma armazenamento (independência...
Index SelectivityTaxa de duplicação numa coluna indexada. Selectividadeideal é 1, apenas alcansável em índices únicos.Is =...
Medição: Index SelectivitySELECT COUNT (DISTINCT “Disciplina”)                      “Valores distintos” FROM disciplina;Va...
Medição: Index SelectivityCardinalidade[Código Postal] Quantos distintos haverá em PT?Valores distintos  ---------------  ...
Medição: Index SelectivityAjuda a decidir entre:     • B*Tree     • Bitmap1. Se SELECTIVIDADE > 4% é B*Tree2. Se SELECTIVI...
Medição: Index SelectivityAuditoria aos índices em uso (Oracle)                         SELECT                          IN...
Index DensityPercentagem de duplicados numa coluna indexadaSupor tabela com 2 milhões linhas: 1 / NUM_DISCTINCT (not null)...
JoinsDois métodos de join:   • Join em ciclo (nested-loop join)        uma linha é identificada na tabela outer e em segui...
JoinsNº de tabelas na junção   Nº de possíveis (ordens) de junções1                         12                         23 ...
Caminho de acesso aos dadosVarrimento das tabelas: • não existe(m) índice(s) ou as condições   [WHERE] excluem o(s) índice...
Caminho de acesso aos dadosAcesso directo pelo índice (direct index lookup)   SELECT        número, apelido, nome   FROM  ...
Caminho de acesso aos dadosVarrimento do índice:Varrimento por comparação exacta      (matching index scan)SELECT      núm...
Caminho de acesso aos dadosVarrimento do índice: Varrimento por comparação exacta       (matching index scan)             ...
Caminho de acesso aos dadosVarrimento do índice: Varrimento pela posição relativa    (nonmatching index scan)SELECT       ...
Caminho de acesso aos dadosVarrimento do índice:  Varrimento pela posição relativa     (nonmatching index scan)           ...
Caminho de acesso aos dadosVarrimento do índice: • varrimento do índice > varrimento da tabela
Caminho de acesso aos dadosClustered ou unclustered: • Acesso associado ao índice: lê pág. dados uma única • Acesso desass...
Caminho de acesso aos dadosIndex screening: SELECT        número, apelido FROM          empregado WHERE         cargo = “G...
Caminho de acesso aos dadosAcesso restrito aos índices (index covering) SELECT      número, apelido FROM        empregado ...
Caminho de acesso aos dadosAcesso restrito aos índices (index covering) • Não há I/O adicional à tabela • “Encorajar” o ac...
Caminho de acesso aos dadosAcesso múltiplo (multi-index access): SELECT       número, apelido FROM         empregado WHERE...
Caminho de acesso aos dadosAcesso múltiplo (multi-index access): Por vezes pode minimizar-se o número de índices criados p...
Ordenação de dadosA utilização de índices para evitar SORTs:•   Distinct•   Union•   Group by•   Order by
Desprezo pelo índiceO optimizador não utiliza o índice: • Sem predicados • Join com várias/muitas tabelas • Estatísticas d...
Views: acessoDois métodos: • View merging • View materialization O view merging é o método mais eficiente. O SQL aplicado ...
Re(escrita) de queriesAlguns optimizadores:WHERE coluna1 >= 1 AND coluna1 <= 100   , podem transformar estacláusula nesta:...
Re(escrita) de queriestransitividade do predicado (predicate transitive closure)SELECT d."Nome do Departamento", e."Nome",...
Optimização pelo custo O optimizador relacional é o subsistema de um SGBDR que gera planos de execução.• Efeito da modific...
Análise do caminho de acessoSQL Server:• ShowPlanOracle:• Explain    set timing on; (SQL*Plus)
SQL: regras de MullinsCodificação do SQL para a eficiência:Regra 1: Depende...Regra 2: Posição na query da cláusula       ...
Optimização do SQLVideo [“esclarecedor”] sobre SQLOptimization em Oracle: ver aqui.
Afinação da Aplicação - OracleSQL Analyse (Oracle): ver aqui.
Próximos SlideShares
Carregando em…5
×

Gestão da Aplicação

563 visualizações

Publicada em

Publicada em: Educação
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Gestão da Aplicação

  1. 1. Administração de Bases de DadosAfinação da Aplicação (Desempenho da Aplicação) Carlos Pampulim Caldeira http://www.di.uevora.pt/~ccaldeira http://makingdatawork.blogspot.pt
  2. 2. Optimizador Relacional• SQL, standard para acesso à informação• Alto nível de abstracção• Quais são os dados pretendidos• Não especifica como os ir buscar• Access paths, caminhos de acesso aos dados• Forma desestruturada de escrita• Operações a nível de conjuntos de dados• Permite a adaptação do SQL ao ambiente dinâmico da base de dados: • Tabelas crescem / diminuem • Índices adicionados / removidos • Base dados fragmentada / desfragmentada
  3. 3. Optimizador Relacional
  4. 4. Optimizador RelacionalAplicações estão isoladas: • Estrutura (independência Lógica) • Forma armazenamento (independência Física)
  5. 5. Index SelectivityTaxa de duplicação numa coluna indexada. Selectividadeideal é 1, apenas alcansável em índices únicos.Is = total valores distintos / número de linhas da tabela Ex. Boa selectividade: 88 000 /100 000 = 0.88Is < 0,1
  6. 6. Medição: Index SelectivitySELECT COUNT (DISTINCT “Disciplina”) “Valores distintos” FROM disciplina;Valores distintos --------------- 5SELECT COUNT(*) “Nº Total Linhas” FROM disciplina;Nº Total Linhas ----------------- 14Is = 5 / 14 = 0,35(714…)
  7. 7. Medição: Index SelectivityCardinalidade[Código Postal] Quantos distintos haverá em PT?Valores distintos --------------- 1000?Se tiver uma tabela com registo de 10 milhões delicenças de condução?Selectividade = 1000 / 10 000 000Is = 0,0001%
  8. 8. Medição: Index SelectivityAjuda a decidir entre: • B*Tree • Bitmap1. Se SELECTIVIDADE > 4% é B*Tree2. Se SELECTIVIDADE < 4% é BitmapOs índices, com uma selectividade inferior a 0,1%, devem ser do tipo Bitmap poiscaso contrário nem serão levados em consideração pelo optimizador relacional.
  9. 9. Medição: Index SelectivityAuditoria aos índices em uso (Oracle) SELECT INDEX_NAME "Nome", DISTINCT_KEYS / NUM_ROWS * 100 "SELECTIVITY %", NUM_ROWS, DISTINCT_KEYS "DISTINCT", LEAF_BLOCKS, CLUSTERING_FACTOR, BLEVEL "LEVEL", AVG_LEAF_BLOCKS_PER_KEY "ALFBPKEY" FROM DBA_INDEXES WHERE DISTINCT_KEYS / NUM_ROWS < .1 AND NUM_ROWS > 0 ORDER BY "SELECTIVITY %" DESC;
  10. 10. Index DensityPercentagem de duplicados numa coluna indexadaSupor tabela com 2 milhões linhas: 1 / NUM_DISCTINCT (not null) 1 / 2 000 000 = 0,0000005 1 / 2 = 0,5
  11. 11. JoinsDois métodos de join: • Join em ciclo (nested-loop join) uma linha é identificada na tabela outer e em seguida a tabela inner é varrida à procura de uma ligação e, assim sucessivamente até à última ocorrência na tabela outer. • Join combinado (merge-scan join) as linhas das tabelas são ordenadas e depois cada uma das tabelas é lida sequencialmente e as colunas coincidentes são assinaladas e as linhas devolvidas.Notas: O join combinado deve ser o escolhido quando a tabela joined um número muito grande linhas ou quando há muitas linhas que satisfazem a condição, ou ainda quando os predicados do join não são muito selectivos.
  12. 12. JoinsNº de tabelas na junção Nº de possíveis (ordens) de junções1 12 23 64 245 1206 7207 50408 403209 36388010 362880011 3991680012 47900160013 622702080014 8717829120015 130767436800016 20922789888000
  13. 13. Caminho de acesso aos dadosVarrimento das tabelas: • não existe(m) índice(s) ou as condições [WHERE] excluem o(s) índice(s) • grande número de linhas que satisfazem as condições • índices com baixo clustering (index page cluster ratio) • a tabela é demasiado pequena (poucas linhas)
  14. 14. Caminho de acesso aos dadosAcesso directo pelo índice (direct index lookup) SELECT número, apelido, nome FROM empregado WHERE cargo = “Gerente” AND função = 1 AND departamento = “D01” ; cargo função departamento
  15. 15. Caminho de acesso aos dadosVarrimento do índice:Varrimento por comparação exacta (matching index scan)SELECT número, apelido, nomeFROM empregadoWHERE cargo = “Gerente”AND função = 1AND departamento = “D01” ;
  16. 16. Caminho de acesso aos dadosVarrimento do índice: Varrimento por comparação exacta (matching index scan) Pág Raíz Pág Pág Nonleaf Nonleaf Pág Pág Pág. Nonleaf Nonleaf Nonleaf Folha Folha Folha Folha Folha
  17. 17. Caminho de acesso aos dadosVarrimento do índice: Varrimento pela posição relativa (nonmatching index scan)SELECT número, apelido, nomeFROM empregado Não há predicado deWHERE função = 1 entrada no índice,AND departamento = “D01” ; logo a estrutura do índice não pode ser utilizada.
  18. 18. Caminho de acesso aos dadosVarrimento do índice: Varrimento pela posição relativa (nonmatching index scan) Pág Raíz Pág Pág Nonleaf Nonleaf Pág Pág Pág. Nonleaf Nonleaf Nonleaf Folha Folha Folha Folha Folha
  19. 19. Caminho de acesso aos dadosVarrimento do índice: • varrimento do índice > varrimento da tabela
  20. 20. Caminho de acesso aos dadosClustered ou unclustered: • Acesso associado ao índice: lê pág. dados uma única • Acesso desassociado ao índice: múltiplas leituras mesma pág. de dados A CP não é uma boa opção para ser um índice clustered dado que o acesso aos seus valores é aleatório enquanto que o clustered favorece o acesso sequencial. Os índices clustered ao lerem as páginas das folhas nunca lêm a mesma duas vezes. Já os índices unclustered fazem múltiplos pedidos pois os dados estão espalhados pela tabela.
  21. 21. Caminho de acesso aos dadosIndex screening: SELECT número, apelido FROM empregado WHERE cargo = “Gerente” matching AND função = 1 AND salário > 40000 ; pos. relativo cargo função departamento salário
  22. 22. Caminho de acesso aos dadosAcesso restrito aos índices (index covering) SELECT número, apelido FROM empregado WHERE cargo = “Gerente” AND função = 1 AND salário > 40000 ; cargo função departamento salário apelido número
  23. 23. Caminho de acesso aos dadosAcesso restrito aos índices (index covering) • Não há I/O adicional à tabela • “Encorajar” o acesso index-only • Sobrecarga de colunas indexadas
  24. 24. Caminho de acesso aos dadosAcesso múltiplo (multi-index access): SELECT número, apelido FROM empregado WHERE cargo = “Gerente” AND função = 1 ; cargo função
  25. 25. Caminho de acesso aos dadosAcesso múltiplo (multi-index access): Por vezes pode minimizar-se o número de índices criados promovendo múltiplos índices simples, i.e., com uma única coluna, em vez de muitas colunas compostas indexadas. A decisão de aplicar uns e/ou outros depende da eficiência do SGBDR na utilização das diversas formas de indexação. Nota: AND; OR
  26. 26. Ordenação de dadosA utilização de índices para evitar SORTs:• Distinct• Union• Group by• Order by
  27. 27. Desprezo pelo índiceO optimizador não utiliza o índice: • Sem predicados • Join com várias/muitas tabelas • Estatísticas desactualizadas
  28. 28. Views: acessoDois métodos: • View merging • View materialization O view merging é o método mais eficiente. O SQL aplicado no DDL da view é aglutinado (merged) com o SQL que refere a view. O SQL resultante é então utilizado para determinar o caminho de acesso aos dados. Quando não é possível combinar o SQL da view com o SQL que acede à view é criada uma tabela temporária que armazena os resultados da view. O SQL que acede à view é depois aplicado aos resultados guardados na tabela temporária. Daí a relativa ineficiência da view materialization.
  29. 29. Re(escrita) de queriesAlguns optimizadores:WHERE coluna1 >= 1 AND coluna1 <= 100 , podem transformar estacláusula nesta:WHERE coluna1 BETWEEN 1 AND 100
  30. 30. Re(escrita) de queriestransitividade do predicado (predicate transitive closure)SELECT d."Nome do Departamento", e."Nome", e."Número de Funcionário"FROM empregado e, departamento dWHERE e."Código do Departamento" = d."Código do Departamento"AND d."Código do Departamento" = "DO59"; SELECT d."Nome do Departamento", e."Nome", e."Número de Funcionário" FROM empregado e, departamento d WHERE e."Código do Departamento" = d."Código do Departamento" AND e."Código do Departamento" = "DO59";
  31. 31. Optimização pelo custo O optimizador relacional é o subsistema de um SGBDR que gera planos de execução.• Efeito da modificação dos parâmetros de configuração (Oracle): o cost-based
  32. 32. Análise do caminho de acessoSQL Server:• ShowPlanOracle:• Explain set timing on; (SQL*Plus)
  33. 33. SQL: regras de MullinsCodificação do SQL para a eficiência:Regra 1: Depende...Regra 2: Posição na query da cláusula mais restritivae prosseguindo até à 11ª regra.Mullins, C. 2002. Chapter 12. Application Performance. Database Administration: TheComplete Guide to Practices and Procedures. Addison Wesley.
  34. 34. Optimização do SQLVideo [“esclarecedor”] sobre SQLOptimization em Oracle: ver aqui.
  35. 35. Afinação da Aplicação - OracleSQL Analyse (Oracle): ver aqui.

×