Como ajustar SQL no Oracle 12c

O maior retorno você está indo para obter em termos de ajuste de desempenho para seus bancos de dados da Oracle 12c é por ter boa Structured Query Language (SQL). SQL mal escrito é predominantemente a causa para a maioria dos problemas de desempenho em qualquer banco de dados.

Escrever um bom SQL de o ir buscar quando um novo aplicativo está sendo desenvolvido pode poupar baldes de dinheiro e tempo mais tarde. Infelizmente, como um administrador de banco de dados, a maioria das situações você se encontra em estão em sistemas pré-existentes onde o SQL já está em vigor.

Como gerar um plano de explicar no Oracle 12c

Digamos que você se estreitou um problema de desempenho para baixo para uma instrução SQL específica no banco de dados. Através questionando o utilizador e testar o problema sozinho, você foi capaz de replicar o problema com uma instrução SQL específica.

Uma das ferramentas fornecidas com o banco de dados que primeiro você quer se familiarizar com é Explicar Plano. Explicar Plano faz exatamente o que diz. Ele mostra a execução da instrução SQL e explica o que cada etapa do plano está fazendo.

O Plano de explicar é gerado usando o comando SQL explain plan para. Como um exemplo simples, digamos que você tem a seguinte instrução SQL, que está levando muito tempo para executar:

first_name SELECT, last_nameFROM empWHERE last_name = 'Hopkins'-

Aqui está como você gerar um plano de explicação para a instrução anterior:

EXPLIQUE PLANO FORSELECT first_name, last_nameFROM empWHERE last_name = 'Hopkins'-

Você vê esta saída depois de gerar o plano de explicação:

Explicou.

Após a instrução SQL é explicada, por padrão, o plano é armazenado na tabela do dicionário de dados chamado de PLAN_TABLE $. Há um sinônimo público, PLAN_TABLE, que permite que todos os usuários tenham acesso a esta tabela interna.

Como exibir e ler a saída de instrução SQL no Oracle 12c

É possível retirar a informação no PLAN_TABLE em um número de maneiras. Existe uma grande quantidade de informação a ser exibida. Resultados tudo isso nem sempre é útil. Um método simples é para executar um script do Oracle fornecido para ler e formatar as informações.

Este método exibe apenas o mais recente Explicar Plano. O script é armazenado no diretório $ ORACLE_HOME / rdbms / admin. O script é chamado utlxpls. De SQL na mesma sessão onde você executou o EXPLICAR, digite o seguinte:

SQL> @? Rdbms admin utlxpls

Um atalho para especificar ORACLE_HOME é o # 147 -? # 148- como mostrado na declaração anterior.

A saída explicou de sua instrução SQL semelhante a este:

PLAN_TABLE_OUTPUT ------------------------------------------------- ------------------------- Plano valor de hash: 3956160932 -------------------- -------------------------------------------------- ---- | Id | operação | Nome | linhas | bytes | Custo (% CPU) | Tempo | ------------------------------------------------ -------------------------- | 0 | Instrução SELECT | | 1 | 15 | 40335 (2) | 00:00:02 || * 1 | QUADRO DE ACESSO COMPLETO | EMP | 1 | 15 | 40335 (2) | 00:00:02 | -------------------------------------------- ------------------------------ Informações predicado (identificado pelo código de operação): ----------- ---------------------------------------- 1 - filtro ( "LAST_NAME" = 'Hopkins ')

Embora ele tenha alguma experiência para ler os detalhes finos na saída de EXPLAIN PLAN, algumas coisas saltar para fora:

  • O uso de uma varredura completa da tabela (QUADRO DE ACESSO COMPLETO EMP)

  • A informação predicado (1 -. Filtro ( "LAST_NAME" = 'Hopkins') Esta é a sua cláusula where.

  • O número 1 combinando a informação predicado de volta para a operação. Os índices número esta de volta para a etapa na seção acima. Neste exemplo, parece simples, mas, se você tiver um plano de explicação com dezenas de linhas, isso pode ser muito útil.

Outro bit de informação que você pode notar é o valor para a COST. No caso anterior, o custo é de 40335. Embora o custo por si só não significa necessariamente qualquer coisa pelo valor de face, você pode usá-lo para comparar as mudanças que você fizer para o plano de execução. Normalmente, quanto mais baixo o custo é, melhor o seu plano.

Declarações com muitas operações diferentes têm custos associados a cada etapa. Ao olhar para o custo de cada etapa, você pode determinar o estágio da execução é o mais caro (resource-wise, não o dinheiro-wise). Depois, você pode focar a sua sintonia no palco. Na maioria das vezes, como você fazer alterações e reduzir o custo, você está fazendo se move na direção certa.

Aqui está um exemplo mais complexo de um plano de execução:

explicar plano first_name forSELECT, last_name, department_nameFROM emp juntar departamentos usando (department_id) ONDE last_name = 'Hopkins-Explained.Elapsed: 00: 00: 00.09SQL> @?rdbmsadminutlxplsPLAN_TABLE_OUTPUT----------------------------------------------------------------------------------Plan valor de hash: 3338584009 ---------------------------------------------- ------------------------------------------ | Id | operação | Nome | linhas | bytes | Custo (% CPU) | Tempo | ------------------------------------------------ ---------------------------------------- | 0 | Instrução SELECT | | 1 | 34 | 40336 (2) | 00:00:02 || 1 | Nested Loops | ||| | || 2 | Nested Loops | | 1 | 34 | 40336 (2) | 00:00:02 || * 3 | QUADRO DE ACESSO COMPLETO | EMP | 1 | 18 | 40335 (2) | 00:00:02 || * 4 | UNIQUE INDEX SCAN | DEPT_ID_PK | 1 || 0 (0) | 00:00:01 || 5 | ACESSO tabela por ROWID INDEX | DEPARTAMENTOS | 1 | 16 | 1 (0) | 00:00:01 | -------------------------------------------- -------------------------------------- Informação predicado (identificado pelo código de operação): --- ------------------------------------------------ 3 - filtro ( "EMP" "LAST_NAME" = 'Hopkins'.) 4 - acesso (.. "EMP" "DEPARTMENT_ID" = "departamentos" "DEPARTMENT_ID")

Neste exemplo, você vê cinco operações. Ao olhar para a operação de altura (Passo 5) e trabalhando para trás, você pode ver que o custo parece com isso:

Passo 5 = 1
Passo 4 = 0
Passo 3 = 40335
Etapa 2 = 40336
Passo 1 = 40.336
Total = 40.336

Observe como o custo de todas as etapas acrescenta-se. Note também como o custo do Passo 3 é de longe o mais caro. Com isso dito, um administrador de banco de dados (DBA) gostaria de focar seus esforços de ajuste na Etapa 3.

menu