OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes...

14
OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha

Transcript of OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes...

Page 1: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

OTIMIZAÇÃO DE BANCO DE DADOSORACLE – SQL TRACE – PL/SQL

Dênio dos Santos

Rodrigo Gomes Santana

Wagner Warley Ferraz Silva

Professor: Rogério Morais Rocha

Page 2: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

Objetivo

Capturar as consultas através da ferramenta SQL TRACE. Identificar as consultas que mais consomem recursos do banco de dados.

Analisar o Plano de execução das consultas utilizando a ferramenta PL/SQL Dev.

Page 3: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

Cenário

Page 4: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

SQL TRACE O SQL TRACE FOI UTILIZADO PARA CAPTURAR AS CONSULTAS QUE MAIS CONSOMEM RECURSOS DO SERVIDOR DE BANCO DE DADOS

Page 5: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

As consultas identificadas que são mais custosas para o servidor de banco de dados, não são passíveis de muita otimização.

Nestas consultas não existem filtros para ser aplicados os índices. Nestes casos se faz um estudo para alterar a regra de negocio.

Uma das alternativas seria remover o UNION ALL que a maioria delas apresenta e executar cada uma delas separadamente.

Uma outra alternativa seria criar uma Procedure para fazer a inserção dos dados gerados pelas consultas em tabelas temporárias e retornar o resultado.

Otimização

Page 6: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

Diante deste cenário vamos apresentar algumas consultas que

são passiveis de Otimização.

Page 7: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

CASO 1SELECT F.CD_FITA, F.NM_FILME, C.VR_CORFROM TB_FITA F, TB_COR C WHERE C.CD_COR = F.CD_COR AND C.VR_COR > 3 ANDF.CD_FITA NOT IN (SELECT CD_FITA FROM TB_ITEM_LOCACAO_TITULAR WHERE DT_DEVOLUCAO IS NULL) UNION ALL SELECT F.CD_FITA, F.NM_FILME, C.VR_CORFROM TB_FITA F, TB_COR CWHERE C.CD_COR = F.CD_COR AND C.VR_COR > 3 ANDF.CD_FITA NOT IN (SELECT CD_FITA FROM TB_ITEM_LOCACAO_DEPENDENTE WHERE DT_DEVOLUCAO IS NULL)

Page 8: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

CASO 1Índices Criados

create index IX_TB_COR_001on TB_COR(CD_COR,VR_COR)

create index IX_TB_ITEM_LOCACAO_TIT_001ON TB_ITEM_LOCACAO_TITULAR(CD_FITA,DT_DEVOLUCAO)

create index IX_TB_ITEM_LOCACAO_DEP_001ON TB_ITEM_LOCACAO_DEPENDENTE(CD_FITA,DT_DEVOLUCAO)

Page 9: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

CASO 1

Modificações na Query

SELECT F.CD_FITA,F.NM_FILME,C.VR_COR

FROM TB_FITA F, TB_COR C

WHERE C.CD_COR = F.CD_COR AND C.VR_COR > 3 AND

NOT EXISTS (SELECT 1 FROM TB_ITEM_LOCACAO_TITULAR IL WHERE F.CD_FITA = IL.CD_FITA AND IL.DT_DEVOLUCAO IS NULL)

UNION ALL

SELECT F.CD_FITA, F.NM_FILME, C.VR_COR

FROM TB_FITA F, TB_COR C

WHERE C.CD_COR = F.CD_COR AND C.VR_COR > 3

AND NOT EXISTS (SELECT CD_FITA FROM TB_ITEM_LOCACAO_DEPENDENTE ID WHERE ID.CD_FITA = F.CD_FITA AND ID.DT_DEVOLUCAO IS NULL)

Page 10: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

CASO 1Resultados

Page 11: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

CASO 2QUERY

SELECT SUM(NVL(T.VR_PAGO,0) + NVL(D.VR_PAGO,0)) VR_PAGOFROM(SELECT SUM(A.VR_PAGO) VR_PAGOFROM TB_ITEM_LOCACAO_TITULAR AWHERE TO_NUMBER(TO_CHAR(A.DT_DEVOLUCAO,'YYYY')) = 2009) T,(SELECT SUM(A.VR_PAGO) VR_PAGOFROM TB_ITEM_LOCACAO_DEPENDENTE AWHERE TO_NUMBER(TO_CHAR(A.DT_DEVOLUCAO,'YYYY')) = 2009) D

Page 12: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

CASO 2INDICES CRIADOS

create index IX_TB_ITEM_LOCACAO_TIT_001on

TB_ITEM_LOCACAO_TITULAR(TO_NUMBER(TO_CHAR(DT_DEVOLUCAO,'YYYY')))

create index IX_TB_ITEM_LOCACAO_DEP_001on

TB_ITEM_LOCACAO_DEPENDENTE(TO_NUMBER(TO_CHAR(DT_DEVOLUCAO,'YYYY')))

Page 13: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

CASO 2RESULTADO

Page 14: OTIMIZAÇÃO DE BANCO DE DADOS ORACLE – SQL TRACE – PL/SQL Dênio dos Santos Rodrigo Gomes Santana Wagner Warley Ferraz Silva Professor: Rogério Morais Rocha.

Conclusões

• Otimização de Querys não somente se refere a criação e utilização de Indices.

•Temos de avaliar também a query em si. Existe conversões que invalidam indices.

•Muitas vezes também e passível de rever a regra de negocio.