miércoles, 28 de septiembre de 2011

Evolución Optimizador de Oracle Database de V6 a V11g


Algunos de ustedes, tal vez en alguna ocasión, han escuchado hablar de como se hacía un "tuning" en una base de datos Oracle, hace unos 10 o 15 años atrás.
Sinceramente, las condiciones eran otras muy distintas a las actuales.
Mientras mi primer contacto con una base de datos Oracle, fue en un superpoderoso AST 386 DX 33Mhz, con 32Mb de RAM y 80MB SCSI de disco duro, con Sco Unix y Oracle V5.5; hoy un servidor de base de datos, es varios cientos de veces más rápido y robusto.
Recién escuchamos a M. Hurd, Presidente de Oracle, hablar sobre el nuevo producto de base de datos Oracle, "El Oracle Database Appliance", una mezcla de software y hardware enlatados, que permite de una manera ágil, poner al alcance de las pequeñas empresas y medianas, una solución de HA a "bajo precio". Y digo "bajo precio" entre comillas, porque aún no tenemos ni idea, cuánto costará el hardware básico de este producto.
Muy posiblemente, en la próxima semana durante el OOW 2011, tendremos el panorama más claro, sobre este tema.
Pero volviendo a lo que hoy nos trae, me gustaría entregarles, cuáles han sido las principales características relacionadas con la optimización del motor de la base de datos Oracle, partiendo de la versión 6 a la actual.
Así, ustedes podrán ser testigos de más de 20 años de evolución y por lo tanto, tener claro, que el tema de "optimización", no es una receta escrita en una hoja de papel o guardada en un archivo de nuestra portátil o tableta, en un formato que me permite fácilmente, consultar y obtener, las curas a todos los males.
El afinamiento o tuning como lo quieran llamar, lleva mucha "malicia indígena", experiencia, conocimiento profundo de la arquitectura del motor de la base de datos que estamos utilizando y sobre todo, un análisis adecuado de todos los factores que intervienen en el entorno.
Antes de hacer cambios a lo loco, el procedimiento adecuado, lleva consigo, el realizar lo que yo defino, con palabras muy a lo CSI, "Análisis Forense", es sólo en este punto, donde en realidad, podemos obtener información precisa y clara, de que es lo que esta sucediendo a nivel de la base de datos y que cambios debemos realizar, para mitigar el impacto, del bajo rendimiento de un procedimiento o de la base de datos en global.
Les entrego entonces a manera de resumen, las principales novedades que han surgido a lo largo de cada uno de estos 20 años de historia.
Oracle6 - Oracle7 – El cambio más importante en la migración de la versión 6 a la versión 7 de Oracle Database, fué la incorporación de la optimización basada en “Costo”.

Esto implicó para los desarrolladores, hacer ajustes importantes a nivel de las sentencias que tomaban gran cantidad de tiempo en ejecutarse y aplicar reglas de “hints”  para obligar a la base de datos a comportarse como lo hacía en la versión anterior.

Por su parte, los DBA’s, sorteaban el problema, utilizando técnicas que implicaban configurar el parámetro del modo de empleo del optimizador a optimizer_mode=rule y ajustar el optimizer_index_cost_adj.

Oracle8 - Oracle8i – En este cambio de versiones, es cuando alcanza su madurez el optimizador basado en costo y vemos la aparición de las  vistas materializadas y se mejora la recopilación de estadísticas para el CBO.

Se introduce el DBMS_STATS, que permite una mejor colección de datos de la metadata, que le permite al CBO ser más inteligente a la hora de tomar la decisión de optimización, para la elaboración del explain plan.

Aparecen los indexes basados en funciones, que alivian en gran parte los problemas de acceso total a tablas (FTS ). Sin embargo a pesar de todos estos cambios, la optimización basada en reglaaún era utilizada, al igual que los parámetros optimizer_mode, optimizer_index_cost_adj y otpimizer_index_caching.

También aquí vimos nacer las  famosas tablas temporales globales, para la optimización de consultas  mutipasos en SQL

Sin embargo el cambio más sobresaliente  fué,  la sustitución del utilitario  BSTAT-ESTAT por el  STATSPACK, que permitió el almacenamiento histórico de estadísticas de funcionamiento de la base de datos, indispensable para  el trabajo proactivo.

Oracle9i – En esta versión, vimos la nueva vista v$sql_plan con el fin de ayudar a afinar los SQL’s de forma proactiva y el paquete DBMS_STATS fue mejorado para ser más inteligente. Sin embargo, el DBA se vió obligado con frecuencia para optimizar sus SQL´s, emplear ajustes a los parámetros del optimizador.

También recibimos el paquete DBMS_REDEFINITION para permitir una reorganización en línea de tablas fragmentadas.
Oracle 10gR1 ayudó enormemente a la optimización de las grandes cargas de trabajo de SQL’s con la introducción de muestreo dinámico.

Se introdujeron mejoras en DBMS_STATS para permitir la creación automática de histogramas y el procedimiento gather_system_stats, para  recoger toda la información importante  de factores externos, sobre todo información de discos, sus promedios  en tiempos de acceso para barrer los índices  (lecturas secuenciales) y de exploración completa de acceso (lecturas dispersas ).


Oracle 10g Release 2

A partir de esta versión, Oracle no recomienda establecer el parámetro db_file_multiblock_read_count, ya que el motor de la base de datos Oracle, permite determinar empíricamente el ajuste óptimo.


En Oracle 11g, vemos la promesa de un paquete mejorado en gran medida por el DBMS_STATS, así como la promesa de correr más rápido “2x” y automáticamente recoger una muestra estadísticamente significativa.

También se incorpora una mejor detección de histogramas para las columnas.

Oracle afirma que el ajuste de soporte técnico de las estadísticas de la CBO mejora la ejecución y los cambios para el optimizer_index_cost_adj son "rara vez necesarios. Sin embargo, el DBA todavía tiene que establecer el valor para el optimizer_mode de la manera manual, así como también, el valor del optimizer_index_caching.
Ahora sí, podemos teniendo claro, como se comporta cada optimizador en cada versión de la base de datos, valorar de una mejor manera, que impacto, podríamos tener a la hora de migrar de una versión a otra.
Los invito entonces, a continuar leyendo mis aportes posteriores sobre el tema de "Consideraciones a la hora de migrar de una versión de base de datos a otra".

Todos los Sábados a las 8:00PM

Optimismo para una vida Mejor

Optimismo para una vida Mejor
Noticias buenas que comentar