Cómo afinar sql en oracle 12c

La explosión más grande que se van a poner en términos de optimización del rendimiento para bases de datos Oracle 12c es por tener una buena Structured Query Language (SQL). SQL mal escrito es predominantemente la causa de la mayoría de los problemas de rendimiento en cualquier base de datos.

Escribiendo buena SQL desde el principio, cuando una nueva aplicación está siendo desarrollado le puede ahorrar montones de dinero y tiempo más adelante. Por desgracia, como un administrador de base de datos, la mayoría de las situaciones usted se encuentra en son en sistemas preexistentes donde el SQL ya está en su lugar.

Cómo generar un plan de explicar en Oracle 12c

Digamos que se han reducido un problema de rendimiento a una instrucción SQL específico en la base de datos. A través de preguntas al usuario y probando el problema por sí mismo, que ha sido capaz de replicar el problema con una sentencia SQL específica.

Una de las herramientas que ofrece la base de datos que primero quiere familiarizarse con es explicar el plan. Explicar el plan hace exactamente lo que dice. Se le muestra la ejecución de la sentencia SQL y explica lo que cada paso del plan está haciendo.

Explicar el Plan se genera mediante el comando SQL EXPLAIN PLAN. Como un simple ejemplo, supongamos que tiene la siguiente instrucción SQL, que está tomando mucho tiempo para ejecutar:

FIRST_NAME SELECT, last_nameFROM empWHERE apellidos = `Hopkins`-

Aquí es cómo generar un plan de explicación de la declaración anterior:

Video: [Webinar] ¿Por qué afinar SQL y PL/SQL?

Explain Plan FORSELECT nombre apellido, last_nameFROM empWHERE apellidos = `Hopkins`-

Usted ve esta salida después de generar el Plan Explicar:

Explicado.

Después se explica la sentencia SQL, por defecto el plan se almacena en la tabla de diccionario de datos denominada PLAN_TABLE $. Hay un sinónimo público, PLAN_TABLE, que permite que todos los usuarios tengan acceso a esta tabla interna.

Cómo mostrar y leer la salida de la sentencia SQL en Oracle 12c

Usted puede sacar la información en el PLAN_TABLE en un número de maneras. Hay una gran cantidad de información que se mostrará. Viendo todo esto no siempre es útil. Un método simple es ejecutar una secuencia de comandos suministrados por Oracle para leer y dar formato a la información.

Este método muestra sólo el más reciente plan de explicación. El script se almacena en el directorio $ ORACLE_HOME / RDBMS / admin. El script se llama utlxpls. A partir de SQL en la misma sesión en la que se ejecutó el EXPLICAR, escriba lo siguiente:

SQLgt; @ Rdbmsadminutlxpls?

Un acceso directo a la especificación de ORACLE_HOME es el “?” Como se muestra en la declaración anterior.

La salida se explica de la instrucción SQL es similar a esto:

PLAN_TABLE_OUTPUT ------------------------------------------------- ------------------------- plan de valor hash: 3956160932 -------------------- -------------------------------------------------- ---- | Identificación | operación | Nombre | filas | bytes | Costo (% de la CPU) | Tiempo | ------------------------------------------------ -------------------------- | 0 | Instrucción SELECT | | 1 | 15 | 40335 (2) | 00:00:02 || * 1 | TABLA DE ACCESO COMPLETO | EMP | 1 | 15 | 40335 (2) | 00:00:02 | -------------------------------------------- ------------------------------ predicado de la Información (identificado por el ID de operación): ----------- ---------------------------------------- 1 - filtro ("APELLIDO"= `Hopkins`)

A pesar de que se necesita un poco de experiencia para leer los detalles pequeños de la salida del EXPLAIN PLAN, algunas cosas que saltan a:

  • El uso de un escaneo completo de tabla (TABLA DE ACCESO COMPLETO EMP)

  • La información de predicados (1 -. Filtro ( “APELLIDOS” =’Hopkins) Este es su cláusula where.

    Video: Como Configurar o HR e o sys no SQL Developer

  • El número 1 cotejar la información de predicados de nuevo a la operación. El número de índices de esto de nuevo a la etapa en la sección anterior. En este ejemplo, parece sencillo, pero, si tiene un plan de explicación con decenas de líneas, esto puede ser muy útil.

Otro poco de información que tener en cuenta es el valor por el costo. En el caso anterior, el costo es de 40335. Aunque el costo de por sí no significa necesariamente nada a su valor nominal, se puede utilizar para comparar los cambios que realice en el plan de ejecución. Por lo general, menor será el costo es, mejor es su plan.

Declaraciones con muchas operaciones diferentes tienen costos asociados a cada paso. Al observar el costo de cada paso, se puede determinar en qué etapa de la ejecución es el más caro (recurso-sabia, no en cuanto al dinero). A continuación, puede enfocar su puesta a punto en ese escenario. La mayoría de las veces, cuando se realizan cambios y reducir el costo, usted está haciendo se mueve en la dirección correcta.

Aquí está un ejemplo más complejo de un plan de ejecución:

explicar el plan nombre apellido forSELECT, apellidos, énfasis department_nameFROM unirse a los departamentos usando (department_id) DONDE apellidos = `Hopkins`-Explained.Elapsed: 00: 00: 00.09SQLgt; @? RdbmsadminutlxplsPLAN_TABLE_OUTPUT ----------------------------------------------- ----------------------------------- plan de valor hash: 3338584009 ---------- -------------------------------------------------- ---------------------------- | Identificación | operación | Nombre | filas | bytes | Costo (% de la CPU) | Tiempo | ------------------------------------------------ ---------------------------------------- | 0 | Instrucción SELECT | | 1 | 34 | 40336 (2) | 00:00:02 || 1 | Bucles anidados | ||| | || 2 | Bucles anidados | | 1 | 34 | 40336 (2) | 00:00:02 || * 3 | TABLA DE ACCESO COMPLETO | EMP | 1 | 18 | 40335 (2) | 00:00:02 || * 4 | UNIQUE INDEX SCAN | DEPT_ID_PK | 1 || 0 (0) | 00:00:01 || 5 | TABLA DE ACCESO POR ROWID ÍNDICE | DEPARTAMENTOS | 1 | 16 | 1 (0) | 00:00:01 | -------------------------------------------- -------------------------------------- información predicado (identificado por el ID de operación): --- ------------------------------------------------ 3 - filtrar("EMP"."APELLIDO"= `Hopkins`) 4 - acceso ("EMP"."DEPARTMENT_ID"="DEPARTAMENTOS"."DEPARTMENT_ID")

En este ejemplo, se ve cinco operaciones. Al observar el funcionamiento altura (Paso 5) y trabajando hacia atrás, se puede ver que el costo es el siguiente:

Video: Introduction to SQL Pattern Matching in Oracle Database 12c - Part 1

Paso 5 = 1

Paso 4 = 0

Paso 3 = 40,335

Paso 2 = 40,336

Video: Oracle 12c Grant Role to PL/SQL Procedures - Lesson 1 of 2

Paso 1 = 40,336

Total = 40.336

Nótese cómo el costo de todos los pasos que se suma. Observe también cómo el costo de la etapa 3 es, con mucho, el más caro. Dicho esto, un administrador de la base (DBA) querría centrar sus esfuerzos de ajuste en el paso 3.

Artículos Relacionados