¿Que se puede hacer para mejorar el rendimiento de las consultas en Oracle 11?


Tradicionalmente para mejorar el rendimiento de las consultas en SQL contra una BBDD Oracle , una vez optimizada la consulta con técnicas  de Tuneling ( por ejemplo usando Hints si procede) ,   siempre pasamos a dos técnicas clásicas :

  • Reconstruyendo los  índices existente en base de datos ,para lo cual previamente comprobaremos si esos índices deberían de ser reconstruidos  
  • Actualizando estadísticas sobre las tablas que realizamos las consultas.

Veamos mas despacio de que estamos hablando: 

 

Reconstrucción de indices

El índice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla por lo que se suelen usar sobre aquellos campos sobre los cuales se vayan a realizar búsquedas frecuentes dado que su  funcionamiento es similar al índice de un libro: guardando duplas de elemento que se desea indexar junyo a su posición en la base de datos, de modo que para buscar un elemento que esté indexado, sólo necesitamos que buscar en el índice de dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice.

Los índices pueden ser creados usando una o más columnas, preparando la base de datos tanto para búsquedas rápidas al azar como para ordenaciones eficientes de los registros.

Los índices son construidos sobre árboles B, B+, B* o sobre una mezcla de ellos, funciones de cálculo u otros métodos.

El espacio en disco requerido para almacenar el índice es típicamente menor que el espacio de almacenamiento de la tabla (puesto que los índices generalmente contienen solamente los campos clave de acuerdo con los que la tabla será ordenada, y excluyen el resto de los detalles de la tabla), lo que da la posibilidad de almacenar en memoria los índices de tablas que no cabrían en ella. En una base de datos relacional un índice es una copia de parte de una tabla.

La siguiente consulta SQL mostrará el tamaño en megabytes de un índice determinado, en nuestro caso del índice PK_FACTURACION_CODIGO perteneciente a la tabla FACTURACION y el campo CODIGO del ejemplo. La consulta SQL para mostrar el tamaño ocupado por un índice es la siguiente:

select segment_name, sum(bytes)/1024/1024 MB
from dba_extents
where segment_name = ‘INDICE DE EJEMPLO’
group by segment_name

 

 

Es importante periódicamente examinar y determinar qué índices son susceptibles de ser reconstruidos. Cuando un índice está descompensado puede ser porque algunas partes de éste han sido accedidas con mayor frecuencia que otras dando como resultado problemas de contención de disco o cuellos de botella en el sistema.

Normalmente reconstruimos un índice con el comando ALTER INDEX  (esta sentencia se utiliza para cambiar o reconstruir un índice existente en la base de datos).

Para poder ejecutar este comando el índice debe de estar en el propio esquema donde intentes ejecutarlo o deberías de tener el privilegio alter any index. También tenemos que tener en cuenta que para realizar la reconstrucción de un índice deberíamos de tener cuota suficiente sobre el tablespace que lo lanzamos.

Para reconstruir un índice bastaría con lazar la siguiente sentencia

ALTER INDEX <index_name> REBUILD;

Para reconstruir una partición de un índice podríamos hacer lo siguiente

ALTER INDEX <index_name> REBUILD PARTITION <nb_partition> NOLOGGING;

Nota: En algunos casos cuando alguno de los índices tiene algún tipo de corrupción no es posible reconstruirlo. La solución en este caso es borrar el índice y recrearlo

 

 

 

Actualización de estadísticas

Cuando una base de datos Oracle recibe una sentencia “SQL” para resolver una consulta, se llevan a cabo diversas acciones para lograr la entrega del resultado.

Dentro de los diversos pasos uno de los más importantes es el llevado a cabo por el optimizador basado en costos “Cost Based Optimizer o CBO”. Para que el “CBO” pueda determinar de forma exacta el plan de ejecución de para un “SQL Query” debe disponer de la información de las estadísticas de las tablas e índices que participan en el “SQL Query”, esta información comúnmente es conocida como «Optimizer statistics» “Estadisticas del optimizador”, la misma describe como esta compuesto y distribuido internamente el objeto.

Estas estadísticas son utilizadas por el optimizador para elegir el mejor plan de ejecución para cada instrucción SQL.

El tiempo necesario para colectar las estadísticas en algunos casos puede ser de gran medida. En el manejador se pueden utilizar diversos métodos para tratar de reducir el tiempo de esta tarea en la mayor proporción posible.

 

Es importante tener por tanto actualizadas las estadísticas de la base de datos. Para saber si las estadísticas se están lanzando correctamente podemos hacer una consulta sobre la tabla ALL_INDEXES en oracle 11  (en Oracle 10  es  dba_indexes )y ver el campo last_analyzed para observar cuando se ejecutaron sobre ese índice las estadísticas.

Nota: la columna “LAST_ANALYZED” la cual puede ser encontrada en vistas tales como: “DBA_TABLES”, “DBA_INDEXES”, “DBA_TAB_COL_STATISTICS” indica la fecha en que fue calculada la estadística para dicho objeto por ultima vez.

 

Como ejemplo  , si queremos  saber cuando fue la ultima vez que se ejecutaron estadísticas sobre todas las tablas perteneciente a un determinado esquema de BBDD  lanzaremos la siguiente consulta:

SELECT LAST_ANALYZED,table_name FROM ALL_INDEXES ;

 

 

Como vemos con las fechas podemos  hacernos una idea , de lo actualizado que están las estadisticas   sobre cada tabla   

Para actualizar las estadísticas de forma global para  un  esquema de BBDD,  podemos utilizar  el paquete DBM_STATS  de la la siguiente forma:

Execute DBMS_STATS.gather_schema_stats(‘Esquema’);

 

Una vez actualizadas las estadísticas de los índices de la base de datos lanzamos la siguiente consulta:

SELECT LAST_ANALYZED,table_name FROM ALL_INDEXES ;
SELECT index_name, blevel,
DECODE(blevel,0,'OK BLEVEL',1,'OK BLEVEL',2,
'OK BLEVEL',3,'OK BLEVEL',4,'OK BLEVEL','BLEVEL HIGH') OK
FROM dba_indexes where table_owner='DBPROD08';

 

Con esta sentencia obtendremos el nombre nombre del índice, el blevel y si es correcto este indice.

Los índices que deberíamos de reconstruir son los que en la columna ok aparecen como BLEVEL HIGH.

Blevel (branch level) es parte del formato del B-tree del índice e indica el número de veces que ORACLE ha tenido que reducir la búsqueda en ese índice. Si este valor está por encima de 4 el índice debería de ser reconstruido.

.

Como reparar su contador digital


Desde que cambió la normativa que regulaba el uso de un  limitador  de la potencia contratada aislado de la caja general  de distribución de ca  hoy es posible tener un espacio  libre para  nuestras necesidades . 

Ciertamente   gracias a los contadores inteligentes  con tele-gestión que van instalado  normalmente centralizados en una parte de edificio aparte que integran ademas  la habilidad de interrumpir el suministro la potencia desde estos en función de la potencia contratada , en muchos casos  y  en muchas viviendas ha quedado libre el hueco  que podemos  usar para instalar un sencillo contador+

El panel digital ,como se observa en la imagen    encaja en la parte del hueco dejado por el antiguo magnetotérmico , aunque según el tipo de caja habrá que rebajar algo mas el hueco  con una lima para que encaje perfectamente en el hueco ,   y como se puede  apreciar ,es bastante llamativo visualmente gracias  a su luz de fondo azulada  mostrando en tiempo real   las siguientes medidas:

  • Tensión en voltios de la red de suministro ca
  • Intensidad en amperios del
  • Potencia instantánea consumida en Watios
  • Acumulado de  energía consumida wn Kw/h

 

Este sencillo panel  es muy económico (unos 9€)  y nos va ayudar muchísimo a concienciarnos de nuestro consumo energético pues ofrece la lectura en tiempo real (tensión, corriente, potencia activa, potencia) 

Ademas cuenta con una función de alarma de sobrecarga cuyo  umbral de alarma se puede preseleccionar para avisarnos si nos pasamos de potencia, siguiendo la siguiente operativa:

  • Pulse el botón, cuando la pantalla LCD muestre “SET CLr” después del botón de liberación, ajuste el valor en el informe de estado de energía;
  • El área de potencia muestra el valor actual de la alarma de alimentación y el dígito más bajo comienza a parpadear, entonces puede presionar el botón del +1 digital, cuando no haya operación de tecla más de tres segundos, cambia automáticamente por ajuste digital corto como encima;
  • Después de la configuración, presione el botón más de cinco segundos para guardar y salir automáticamente, el alcance del umbral de potencia activa establecido para el 0.0 ~ 22.0kW

Una ventaja de este panel es que no necesita  fuente  de alimentación externa al llevarla integrada  en esta , lo  que significa en la practica  que únicamente habrá que alimentarla con 220 V c.a. , pero como vamos a ver , a la larga también  es si talón de aquiles porque básicamente la alimentación se hace con un filtro RC con un  condensador serie de 1mf 250V.

Si  tiene  ya  montado este instrumento   y empieza    apagarse o dar lecturas  en primer lugar debe saber que el control de luz de fondo se puede ajustarse presionando brevemente el botón para encender o apagar la luz de fondo,de modo que quedara almacenado  el estado de retroiluminación de almacenamiento automático.

Si falla dando lecturas extrañas ,puede proceder a hacer un  reseteo de las lecturas:

  • Pulse el botón de encendido durante 5 segundos hasta que la pantalla digital parpadee, luego suelte el botón;
  • Si  pulsar el botón, los datos de consumo se borran y se borran para dejar de parpadear;
  • Si pulsa el botón durante 5 segundos hasta que no parpadee, los datos de carga no se borran y la salida se borra.

Si   a  pesar de los pasos  anteriores  el panel  fluctua deberemos revisar el filtro RC de alimentación  al circuito para los cual  :

  • Cortamos la alimentación general ( normalmente desde el mangenetotermico de entrada de la red)
  • Desmonamos la tapa del ict  
  • Quitamos   la alimentación del  panel  directamente  de 220V , eso si , !con mucho cuidado de   asegurarnos  donde van los hilos para  no equivocarnos  al restituirlos (no confundir  donde  se conectan los hilos del  toroide!  (en la foto de bajo se ve claramente los bornes de alimentación  donde serian los dos inferiores)                                                                          
  • Mantenemos  los cables del  circuito  a medir  por el interior del toroide y simplemente desconectamos los dos cables de salida del toroide 
  • Volvemos  a tener el panel   aislado  . Ahora  quitaremos la tapa posterior  y los 4 tornillos que fijan la placa a la caja

  • Ahora  si fluctúa  la lectura del panel  probablemente el condensador  de tamaño considerable  de la entrada se haya estropeado , por lo que deberíamos probar a cambiarlo por uno nuevo ( el de este modelo es de un 1 microFaradio 250V)                                                                             
  • Volveremos a colocar la placa  sobre la caja con los 4 tornillos , según el tipo de condensador que pongamos ( como en la foto ) quizás no podamos poner la tapa de la caja 
  • Ahora antes de colocarlo en la caja original del ICT  deberíamos probarlo conectándolo solo con un cable de alimentación de ca  ( cuidado  nuevamente con las conexiones)                            
  • Si aun persiste la fluctuación    debemos revisar   también la resistencia bobinada de potencia que hay al lado del condensador de alimentación
  • Una vez  funcione , lo  volveremos  a  colocar en la tapa del ict, pondremos las conexiones  eléctricas  teniendo  especial  cuidado  con no confundirlos los hilos del toroide  con los de alimentación
  • Restituimos el suministro de ca
  • Ajustaremos los parámetros de luz

Conviene recordar que por seguridad cuando trabaje en cuadros de baja tensión siempre trabaje cortando la alimentación general y asegúrese después con un polímetro o un busca-polos que efectivamente no hay tensión c.a.

Obviamente si no se tiene experiencia en cableados de baja tensión o no esta seguro de la instalación , le  recomendamos encarecidamente  que este tipo de trabajos lo realice un instalador  o un electricista pues  manejar por error tensiones de ca puede ser peligroso  .