miércoles, 8 de junio de 2011

Optimización de Performace en SQL Server

A continuación se detallan conceptos y pautas básicas a tener en cuenta para un confiable estrategia de optimizacion de rendimiento para DBMS SQL Server.

Existen tres conceptos esenciales.
1) Tareas: El proceso debe considerar trabajar sobre las siguientes areas:
a) Esquema de diseño.
b) Optimización del query.
c) Indexación.
d) Locking.
e) Server Tuning.
2) Importancia: Los niveles más bajos del modelo son muy impoortantes pues impactan en forma directa a la performance, pues no es lo mismo tratar de solucionar o mejorar rendimiento sobre algo no muy correctamante diseñado, es decir, si inviertes tiempo y recursos en el esquema de diseño, la base de datos será más fáciles de optimizar para los demás niveles.
3) Orden: Comienza desde el esquema de diseño y se mueve hacia el server tunning. Este es el orden en que los elementos de la base de datos son más fáciles de optimizar.
Esquema de Diseño
La primera y más importante tarea de performance es optimizar el esquema de diseño. Y optimizar el esquema - diseño de base de datos tiene un impacto directo sobre el resto de los niveles de optimización. En esta etapa engloba los conceptos típicos de normalización, desnormalizacion y generalización o método de análisis de relaciones, columnas y asociaciones entre ellas o mejor dicho relaciones padres e hijos en el esquema de base de datos.
Optimización de Query
El segundo paso en la optimización de la estrategia de performance es optimizar los queries. Esto involucra el rediseño de queries. Luego de que optimices el esquema de base de datos se debe revisar y rediseñar los queries.
Indexación
El paso siguiente es la optimización de índices. Porque ello es el puente entre tus queries y los datos. La existencia o ausencia de los indices pueden afectar la performance de la base de datos ya sea mejorando o empeorando la misma. Es por ello que hay que revisar los índices solo después de haber optimizado los queries y re evaluado tu esquema de base de datos.
Locking
La penúltima fase es la estrategia de optimización de locks. Esta fase impacta en la concurrencia de la base de datos, afectando la performance de la misma. Bien es sabido, que los locking en las bases de datos SQL Server, se recomienda que lo maneje el mismo dbms, salvo que tengan que realizar alguna tarea por ej. en batch y deban lockear alguna tabla para realizar alguna actualización masiva.

Server Tunning

Él ultima paso es la estrategia de optimización es tunear el server. Se puede tunear el server en diferentes aspectos: agregar memoria, mejorar el disco i/O, sumar procesador, etc. Dependiendo de donde tengamos el cuello de botella. Ojo, sumar mas hardware no asegura que el problema de performance desaparezca, sino que esta intimamente ligado a los aspectos tratados con anterioridad y lo que si puede pasar es que tarde un poco mas en alcanzar el pico, por ejemplo memoria, si no se revee bien los niveles anteriores.

miércoles, 23 de marzo de 2011

Oracle 10g - Suse Enterprise Error Consola: java.lang.Exception: Failed to get Number of users

Este error de la consola de Oracle 10gR2 con Suse Enterprise (confirmado versión 10) hace que durante la navegación por la consola vayan apareciendo errores en la parte superior con el mensaje:
java.lang.Exception: Failed to get Number of users

La solución pasa por realizar los siguientes pasos:
1) Parar la consola de Oracle:
>emctl stop dbconsole
2) Ir al directorio:
>cd $ORACLE_HOME/sysman/admin/scripts
3) Realizar backup del fichero osLoad.pl
4) Editar el fichero osLoad.pl y cambiar las siguientes lineas:
>>> my $loadavg = NIL;
<<< my $loadavg = "0.46, 0.66, 0.61";
>>>> my $nusers = NIL;
<<<< my $nusers = 1;
5) Grabar el fichero y arrancar la consola
>emctl start dbconsole

Ora10g: TNS-12518 Listener could not hand off client connection

Cuando se produce este error el listener de nuestra base de datos Oracle está rechazando conexiones y no nos podemos conectar de ninguna manera con la base de datos. Para ver que está pasando podemos consultar el log del listener en /opt/oracle/product/10.2/db_1/network/log/listener.log para ver que nos cuenta el sistema. En el caso que nos ocupa podemos encontrar una entrada como la siguiente:
"TNS-12518: TNS:listener could not hand off client connection"
En el caso que me he encontrado este error puede producirse porque el número de procesos actuales de la base de datos está muy cerca del límite establecido en la configuración (por defecto 150). Inmediatamente se puede solucionar reiniciando el listener pero es recomendable revisar el valor del parámetro processes para incrementarlo. El valor máximo que le asignemos a este parámetro es trivial pero si lo modificamos debemos recalcular el valor de transacctions y sessions para que tengan en cuenta las sessiones de sistema de esta manera:
processes=x
transacctions=x*1.1
sessions=(processes*1.1)+5
Si con esto vemos que no se soluciona o queremos investigar más podemos activar la traza del listener para saber más sobre lo que acontece...

El error ORA-30926 como resultado de una operación Merge

El error ORA-30926 suele producirse cuando se realizan operaciones Merge, y lo normal es que nos deje algo descolocados, ya que la descripción del mismo no da demasiada información sobre lo que está pasando:
ORA-30926: unable to get a stable set of rows in the source tables.
Normalmente este error se produce cuando en la operación Merge a una fila destino que hay que actualizar le corresponden más de una fila en la tabla origen. Como el motor no sabe qué registro escoger devuelve un error. Es un problema de duplicidad en la tabla origen.
Ejemplo:
  • Tenemos:
    TABLA_ORIGEN con los valores
    ID    Descripcion
    1     'El primer valor'
    1     'El valor con id duplicado'
    2     'Otro valor' Y TABLA_DESTINO con los valores
    ID   Descripcion
    1    'Valor a actualizar'
    2    'Este no dará problemas'
    3    'Este se queda igual'
     
  • Queremos hacer un merge utilizando la siguiente sentencia:
MERGE into TABLA_DESTINO dest
USING TABLA_ORIGEN ori
ON (dest.ID = ori.ID)
WHEN MATCHED THEN UPDATE SET a.Descripcion = b.Descripcion;
Con estos datos obtendríamos el siguiente error sobre TABLA_ORIGEN:
ORA-30926: no se ha podido obtener un juego de filas estable en las tablas de origen

  • Ante este error tenemos 3 opciones: 1-. Eliminar los registros duplicados de la tabla origen:
 DELETE FROM TABLA_ORIGEN WHERE id=1 AND Descripcion='El valor con id duplicado'
 
2-. Revisar las claves por las que hacemos la join en el merge:
Si utilizamos también el campo Descripcion en el enlace ya sólo habrá cero o un registro origen para cada destino:

MERGE into TABLA_DESTINO dest
USING TABLA_ORIGEN ori
ON (dest.ID = ori.ID AND
dest.Descripcion=ori.Descripcion)WHEN MATCHED THEN UPDATE SET a.Descripcion = b.Descripcion;
(En este ejemplo no tiene mucho sentido porque la tabla son sólo estos dos campos, y además la join no encontrará coincidencias)

3-. Utilizar en lugar del MERGE un UPDATE con JOIN y el HINT /*+BYPASS_UJVC */  para saltarnos la validación del motor, y cruzar los dedos:
UPDATE /*+ BYPASS_UJVC */
 ( SELECT ori.ID ori_ID,
                  ori.Descripcion ori_Descripcion,
                  dest.ID dest_ID,
                  dest.Descripcion dest_Descripcion
    FROM TABLA_ORIGEN ori, TABLA_DESTINO dest
    WHERE ori.ID = dest.ID)
SET dest_Descripcion = ori_Descripcion;

Obviamente las más recomendables son la primera o la segunda, según el caso.

Las suites de Business Intelligence de Oracle

Oracle, aparte de su famoso gestor de base de datos, dispone de un gran catálogo de productos de software, muchos desarrollados internamente y otros adquiridos mediante la compra de otras compañías. Dentro del entorno del Business Intelligence este hecho es aún más notable, ya que justamente varias de las últimas adquisiciones de Oracle han sido operaciones de compra de fabricantes de software de BI.
El resultado es que, aunque cada herramienta tiene unas características y un mercado más apropiado, existen muchos solapamientos, y cuesta un poco situarse a la hora de elegir qué software o conjunto de herramientas podríamos utilizar para nuestro proyecto de Business Intelligence.
Para acabar de complicarlo hay que pensar también en las condiciones del licenciamiento y que el software suele comercializarse en suites que agrupan diferentes herramientas bajo un criterio que puede favorecernos o no.
Un buen ejemplo del efecto que esta situación puede provocar es el post Confusión con Oracle Business Intelligence, de Business Intelligence fácil
Yo tampoco soy un experto en el software BI de Oracle, pero voy a hacer un resumen de lo que conozco y me parece importante tener en cuenta de las tres suites que comercializa Oracle para Business Intelligence.
Cabe decir que este no es el único software de BI de Oracle, y que después de la adquisición de Hyperroll aún se complicará más el panorama, pero creo que con esto analizaremos las soluciones más utilizadas.
Las suites siguen la nomenclatura de las diferentes ediciones de bases de datos que ya conocemos, por lo que ayuda mucho si ya estamos familiarizados con ella. Tenemos una BI Standard Edition 1 (BISE1), que es la más modesta y orientada a pymes. Después viene la BI Standard Edition (BISE), que en teoría correspondería a la versión intermedia. La versión más completa es la BI Enterprise Edition Plus (BIEE), orientada a la gran empresa.

Oracle Business Intelligence Standard Edition (BISE)

Comienzo con la Standard Edition porque se diferencia mucho de las otras dos. Esta suite es la que tiene más historia. Es la evolución de las clásicas herramientas de reporting de Oracle, con Discoverer a la cabeza. Es la que tiene el coste menor por usuario nominal, pero no incluye la base de datos. Utiliza IAS para proveer el acceso web a los informes y cuadros de mando.
Puede encajar en entornos en los que se trabaja casi exclusivamente con Oracle, y no se quiera hacer una inversión demasiado grande para el BI o el reporting. De todas maneras, aunque Discoverer ha mejorado bastante, y ahora hasta puede funcionar en modo OLAP, creo que sigue estando lejos del nivel de herramientas de BI como BI Answers o Hyperion, que Oracle ofrece en las otras suites, y que son fruto de sus adquisiciones. 
De hecho, aunque la suite se sigue comercializando, es bastante complicado encontrarla en la web de Oracle, no parece que la intención sea apostar por ella para el futuro. 
Estos son los productos que incorpora:

 

Oracle Business Intelligence Standard Edition 1 (BISE1)

Esta es la suite más modesta, muy asequible para pymes. Incluye todo lo necesario para tener funcionando en poco tiempo un sistema de Business Intelligence. Eso si, se ha de instalar todo en un servidor, y este ha de ser un Windows Server.
La licencia no permite utilizar más de dos CPU's del servidor y sólo permite utilizar otra fuente de datos directa aparte de la BD que incluye. El licenciamiento es obligatoriamente por usuario nominal, y se pueden licenciar entre 5 y 50 usuarios. La licencia es fácilmente transformable a una Enterprise, ya que esta última incluye el software de la Standard.
La instalación se realiza fácilmente, y en un sólo proceso instala en el servidor la base de datos, la herramienta de ETL Oracle Warehouse Builder (la versión básica), el servidor de BI y el resto de aplicaciones.
Este servidor de BI permite acceder por web a la herramienta de reporting analítico y de cuadros de mando, tanto para diseño como para explotación. Todo este entorno viene de la adquisición de Siebel que Oracle hizo ya hace algún tiempo, y su anterior denominación era Siebel Analytics.
Es un entorno de BI muy completo y fácil de utilizar, aunque no utiliza estructuras propias de OLAP, trabaja directamente sobre el modelo Relacional de la base de datos.
Las herramientas que incluye la suite son las siguientes:
  • Oracle BI Server: Acceso centralizado a los datos y motor de cálculo que se apoya en un modelo lógico de información empresarial común (nivel de abstracción de los metadatos)
  • Oracle BI Server Administrator: Creación de los metadatos y niveles de abstracción
  • Oracle BI Answers: Autoservicio ad-hoc que permite a los usuarios finales crear fácilmente diagramas, tablas dinámicas, informes y cuadros de mando, y navegar con capacidades de drill up/down.
  • Oracle BI Interactive Dashboards: Cuadros de mando interactivos para entornos de análisis.
  • Oracle BI Publisher (también conocido como XML Publisher): Reporting operacional empresarial y distribución de informes con gran nivel de detalle.
  • Oracle Database Standard Edition One: Base de datos
  • Oracle Warehouse Builder (core ETL): Diseño de base de datos y de extracción, transformación y carga (ETL) que ayuda a gestionar el ciclo de vida de los datos y metadatos.
El proceso básico para llegar a crear informes analíticos o dashboards con esta suite sería:
  1. Diseño de la ETL y creación de estructuras dimensionales en tablas con OWB
  2. Definición de metadatos y capas Física, de Negocio y de Presentación con Oracle BI Server Administrator
  3. Creación de informes analíticos y cuadros de mando con BI Answers e Interactive Dashboards
Para crear y distribuir informes operacionales se puede utilizar de manera autónoma BI Publisher.
Los informes se diseñan con Microsoft Word o Adobe Acrobat (instalando un add-in) y después también se pueden publicar y editar mediante servidor web WebDav.
Este software, aunque se integra con el portal de BI Dashboards es propio de Oracle, y es un poco más engorroso de utilizar. No se suele usar a menos que existan necesidades específicas que no se puedan solucionar con BI Answers. 
Se puede obtener más información sobre BISE1 en la sección del producto de la web de Oracle.
Para aprender en poco tiempo cómo empezar a trabajar con esta suite, con el apoyo de esquemas de ejemplo que se cargan al instalar el producto, recomiendo especialmente seguir el Tutorial de Oracle Business Intelligence Edition One

Oracle Business Intelligence Enterprise Edition Plus (BIEE)

Esta es la suite orientada a la gran empresa y a trabajar con múltiples orígenes de datos.
Está compuesta por todas las herramientas de Oracle BISE1 (exceptuando la base de datos) más algunas complementarias aplicables al mismo entorno, y que amplian la funcionalidad de la misma con utilidades de CPM, monitorización y alertas o para poder utilizar las funciones analíticas en modo desconectado.
Lo del Plus viene por el software de Hyperion, que se ha añadido para ampliar más aún la funcionalidad disponible, sobretodo en cuanto a utilidades de Reporting Financiero, una de sus mejores bazas. Este software funciona muy bien en modo OLAP, aunque para ello necesita apoyarse en un motor multidimensional, y Oracle BI Server no lo es, aunque con la versión empresarial sí que se pueda conectar a motores OLAP y otros tipos de orígenes de datos .
En todo caso, para sacar el máximo partido a las aplicaciones de Hyperion lo más indicado es disponer de o adquirir también una base de datos MOLAP como Essbase. También se pueden utilizar otros orígenes Multidimensionales como SAP BW, o Microsoft OLAP.

Si la suite se licencia por usuarios el mínimo es 50, y también se puede licenciar por procesador. No está limitada en cuanto a número de orígenes de datos, usuarios o CPU's más que por el presupuesto disponible.
Como contiene todas las aplicaciones de la versión BISE1, especialmente el servidor de BI, el paso de la versión más modesta a la Enterprise es inmediato, aunque si se quieren utilizar las aplicaciones de Hyperion la cosa se complica un poco más.
Este es el listado de aplicaciones que la componen: (marco en gris las que también forman parte de Oracle BISE1)

Limpieza de datos con Oracle Warehouse Builder

En el enlace Managing Data Quality se puede acceder a un artículo de Ron Hardman sobre cómo realizar procesos de limpieza de datos con Oracle Warehouse Builder.
El artículo comienza con una introducción a la calidad de los datos y maneras de gestionarla, siendo una de ellas la utilización de las opciones de limpieza de datos de Oracle Warehouse Builder.
Lo interesante es que se muestra cómo descargar un script con datos de prueba, y cómo configurar la herramienta para probar las utilidades de Profiling, definición de Reglas (Data Rules), y corrección o limpieza de los datos. De esta manera se puede ver y probar de manera sencilla cómo implementar un proceso básico de Data Cleansing con esta herramienta.
El artículo original está en inglés pero buscando en la web de Oracle he encontrado los 3 documentos que adjunto, traducidos al castellano, y relacionados con OWB y la limpieza de datos:
  • Informe Ejecutivo - Oracle Warehouse Builder 11g Versión 1 Información General
  • Oracle Warehouse Builder Data Quality Option
  • Oracle Warehouse Builder Enterprise ETL Option

Oracle Warehouse Builder 10g disponible sin cargo

Si trabajas con bases de datos Oracle y te estás planteando la posibilidad de utilizar una herramienta ETL (Extract, Transform & Load) para la alimentación de un Data warehouse, o simplemente para facilitar integraciones o migraciones de datos, te puede ir muy bien saber que Oracle permite la utilización de la versión básica de su herramienta de ETL Oracle Warehouse Builder 10g Release 2, sin coste adicional de licencias.
Eso sí, has de disponer de al menos una licencia de Oracle Database Standard Edition One, Oracle Database Standard Edition o Oracle Database Enterprise Edition.

Para más detalles, consultar el artículo de Oracle Press Oracle Anuncia la Disponibilidad General de Oracle Warehouse Builder 10g Release 2