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

jueves, 11 de marzo de 2010

Oracle: Optimización (II)

Después de estudiar la configuración de la SGA.
La PGA, Program Global Area, es la zona de memoria de cada proceso Oracle. No está compartida y contiene datos e información de control de un único proceso.
La PGA consta del
  • Área de ordenación
  • Resto de memoria privada del proceso
Siguiendo por la PGA los valores a estudiar son:
  • La proporción de ordenaciones que se realizan en memoria frente a las realizadas en disco.
SELECT a.value "Ordenaciones Disco", b.value "Ordenaciones Memoria", ROUND ((100*b.value) / DECODE ((a.value+b.value),0,1, (a.value + b.value)), 2) "Porcent" FROM v$sysstat a, v$sysstat b WHERE a.name = 'sorts (disk)'
Si el porcentaje de ordenaciones realizadas en memoria es menor del 98% el área de ordenación está mal dimensionada. Es necesario modificar ese espacio mediante el parámetro SORT_AREA_SIZE.
A partir de este momento se centra el estudio en las consultas ejecutadas.
  • Table Scan. Las consultas pueden desencadenar operaciones de table scan, hay que controlar que las operaciones de este tipo no deben ser full table scan, las más pesadas. En cualquier caso, las operaciones de este último tipo sobre tablas pequeñas, de diccionario, no generan carga.
SELECT name,value FROM v$sysstat WHERE name LIKE '%table scans%'
  • Bloqueos. Una de las situaciones que más puede afectar al rendimiento de la base de datos es la existencia de bloqueos en el servidor.
SELECT s.sid, s.serial#, p.spid FROM v$session s, v$process p WHERE s.paddr = p.addr AND s.sid in (SELECT session_id FROM v$locked_object)
  • Anulaciones. El mismo caso que el anterior.
SELECT r.name "RB Segment", NVL(s.username, 'no transaction') "Username", s.osuser "OS User", s.terminal "Terminal" FROM v$lock l, v$session s, v$rollname r WHERE l.sid=s.sid(+) AND TRUNC(l.id1/65536) = r.usn AND l.type='TX' AND l.lmode=6 ORDER BY r.name

Una vez comprobada toda la configuración y la situación actual de la instancia, queda observar el uso que se está haciendo del motor: las consultas. Las consultas lanzadas aparecen en la vista V$SQL. Al igual que el resto se vacía con el arranque de la instancia.
Estas consultas se pueden ordenar por cualquiera de sus campos, pero los más útiles son: EXECUTIONS (número de ejecuciones), CPU_TIME (tiempo de CPU) y APPLICATION_WAIT_TIME (tiempo de espera).