Disponible en descarga gratuita Cuadernos de Viaje - Oriente Próximo, el libro con nuestras aventuras en Jordania, Siria e Israel.

miércoles, 10 de marzo de 2010

Oracle: Optimización

Los trabajos de optimización de un gestor de base de datos Oracle pasan siempre por el estudio de las tablas de estadísticas propias del motor. Estas tablas dan información relativa a lo sucedido desde el último arranque, es decir, con cada reinicio de la instancia de base de datos se vacían.
Oracle utiliza dos estructuras de memoria principales para su trabajo: el Área Global del Sistema, SGA (System Global Area o también Shared Global Area) y el Área Global de Programa, (Program Global Area), PGA.
En la SGA Oracle guarda información sobre su estado de manera compartida. Está disponible para todos los procesos, por eso se dice que está compartida.
La SGA consta del
  • Database Buffer Cache
  • Redo Log Buffer
  • Shared Pool
  • Large Pool
  • Java Pool
  • Streams Pool
Empezando por la SGA los valores a estudiar son
  • La cantidad de memoria libre en la Shared Pool
SELECT * FROM v$sgastat WHERE name='free memory';
  • El porcentaje de aciertos de caché, según esta fórmula:
Cache Hit Ratio = 1 - (physical reads / (db block gets + consistent gets))
SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent gets', 'physical reads')
También con
SELECT physical_reads, db_block_gets, consistent_gets, name FROM v$buffer_pool_statistics
Con un valor inferior a 90% es recomendable aumentar la database buffer cache.
  • La relación entre paradas para acceder al redo log y accesos en caché.
SELECT name,value FROM v$sysstat WHERE name ='redo entries' OR name ='redo log space requests'
Con una relación superior a 1:5.000 es necesario ampliar el tamaño del buffer de redo.
  • Los aciertos de Library Cache
SELECT SUM (pins - reloads) / SUM (pins) FROM v$librarycache
Con un valor menor a 95% se recomienda aumentar el tamaño de la Shared Pool.
  • Los aciertos en el diccionario de datos
SELECT SUM(gets) , SUM( getmisses), (SUM( getmisses)/SUM(gets))*100 FROM v$rowcache
Con un porcentaje de fallos (getmisses) frente al de aciertos (gets) mayor de 10-15% es necesario aumentar la Shared Pool y estudiar las consultas lanzadas para asegurarse de que usan parámetros.

Aquí la PGA y el resto.