Pulse para guardar enlace y compartir esta web. Ayuda para Oracle en Twitter Pulse para guardar enlace y compartir esta web. Ayuda para Oracle en Facebook Pulse para guardar enlace y compartir esta web. Búscanos en Google+ Pulse para guardar enlace y compartir esta web Pulse para generar codigo QR del enlace y compartir esta web

Tunning (optimización)

El objetivo de tunning es la puesta a punto (optimización) de las sentencias SQL, desde el punto de vista del tiempo de ejecución y consumo de recursos.

Podemos examinar el comportamiento de una sentencia SQL analizando su plan de ejecución:
  1. con la sentencia EXPLAIN PLAN
  2. con trazas TRACE
Para optimizar las sentencias SQL podemos:
  1. Crear indices adecuados y fomentar su uso (CREATE INDEX).
  2. Aplicar HINTS para modificar o influenciar las decisiones del optimizador.
  3. Actualizar estadísticas periodicamente (ANALYZE).
  4. Usar clausulas STORAGE adecuada en la creación de tablas (CREATE TABLE).
  5. Usar EXPORT IMPORT.
  6. Cuidar la programación.

En particular debemos prestar atención la sentencias SELECT que son más dadas a la complejidad.

Indices

Respecto a los indices debemos tener en cuenta:
  1. Crear índices sobre columnas lo más selectivas posibles (aquellas que reducen al máximo el espacio de búsqueda).
  2. En el caso de los índices compuestos, el orden en el que se declaran estas columnas deberá ser de la más selectiva a la menos selectiva (siempre que sea posible).
  3. En algunos casos es conveniente sustituir índices compuestos por varios índices simples.

Programación

Respecto a la programación:
  1. Limitar los accesos a tablas remotas.
  2. Utilizar la cláusula UNION ALL en lugar de UNION siempre que sea posible.
  3. Evitar el uso de llamadas a funciones PL/SQL en sentencias SQL.
  4. En cambio para determinados problemas, puede ser útil el uso de procedimientos o funciones PL/SQL almacenados en la base de datos en lugar de una sentencia SQL (con un cursor p.ej.).
  5. Considerar que hay distintas opciones para obtener el mismo resultado.
  6. El orden de las tablas en el Join puede ser importante.
  7. Se deben optimizar tambien las subconsultas.
  8. Considerar en algunos casos alternativas al Join (consultas anidadas, cláusula exists subconsulta , outer-join etc...).
  9. Revisar las consultas periodicamente, pueden no se ya optimas debido al constante cambio en el tamaño de las tablas, la distribución de los valores, el esquema etc....

Además

  1. Gestión de las sentencias SQL que contienen vistas. Si una consulta contiene una vista, el optimizador tiene dos formas de actuar: resolver primero la vista y después la consulta o integrar la vista en el texto de la misma. Si se resuelve primero la vista, el resultado completo de la vista se determina en primer lugar y, el resto de las condiciones de la consulta se aplican como filtro. Dependiendo del tamaño de las tablas involucradas puede resultar conveniente hacerlo de un modo u otro. Debemos tener en cuenta que, si una vista contiene una operación de conjunto (GROUP BY, SUM, COUNT o DISTINCT), no podrá ser integrada en la consulta.
  2. Considerar el uso de las bind variables: Las sentencias pueden recoger los parámetros por valor (where salario>1000) o una vez compilada la sentencia haciendo uso de Bind Variables (where salario>:b1). La ventaja de la segunda opción es que Oracle compila un única vez la sentencia y reutiliza el código compilado para cada uno de los valores para los parámetros. En este segundo caso, Oracle no puede calcular el grado de selectividad de una consulta y, en su lugar, aplica un grado de selectividad por defecto (asociado a cada tipo de operación), lo cual puede dar lugar a decisiones "equivocadas". Por lo tanto, trabajando por costes es desaconsejable el uso de Bind Variables, salvo que trabajemos con sentencias que se van a ejecutar repetidas veces y que no ofrezcan muchas dudas en cuanto a los posibles planes de acceso que puede generar.
  3. Utilizar las cláusulas start with y connect by en el caso de consultas sobre datos relacionados por alguna relación de herencia.