ARCHIVELOG y parametrización

Sergok
06 de Febrero del 2004
Hola a Tod@s,
me ha salido un bonito marroncete de esos en los que la experiencia, cosa de la que carezco como DBA, es un grado... Libros, información recogida por varios sitios me han llevado a una serie de conclusiones que me gustaría contrastar con alguien con conocimientos al respecto.
La situación es:
- Servidor con Oracle 8i (sobre Windows XP) instalado.
- Puestos cliente con Oracle 8i (sobre Windows...) y con conexión por TCP.
Y el problema: Lentitud de procesos en determinados momentos...
Salvando problemas con la red (cosa que si alguien me puede decir como validar si la conexión es lo suficientemente rápida se lo agradecería, lo que hago al respecto es comprobar el tiempo de respuesta al hacer un ping al servidor) me he encontrado con que la base de datos esta configurada del siguiente modo:
1) SGA: 593 MB desglosado en:
- Shared Pool 100 MB
- Buffer Cache 454 MB
- Large Pool 600 KB
- Java Pool 38 MB
El caso es que en determinados momentos el espacio ocupado en la SGA llega a alcanzar el 90%.
Desconozco las características del servidor pero posiblemente sea capaz de soportar bastante más. Me gustaría que alguien me dijese valores o como sacar el valor más óptimo en función de la memoria del servidor para estos parámetros.
2) Esta activo el modo ARCHIVELOG y el disco donde se almacenan los ficheros es el mismo donde están el resto de ficheros de la base de datos (Tablespaces, redolog, controlfile ...), en determinados momentos con alta información transaccional se llegan a copiar ficheros cada 40 segundos. Mi intención es recomendar que se modifique la ruta de almacenamiento de estos ficheros (incluso que se desconecte el modo ARCHIVELOG y se recurra a otro método de Backup) y no sé si recomendar también el aumentar el tamaño de los redolog... Tampoco sé si el rendimiento se puede ver tan sensiblemente afectado por esto.

En fin, que ando dando palos de ciego y si alguien me puede guiar un poco se lo agradecería enormemente.

Gracias y perdón por el rollo.
Un saludo,
Sergio.

Cazurro
06 de Febrero del 2004
Ya sabes más que yo...

Adrian
06 de Febrero del 2004
40 segundos por log switch es excesivo, aumenta el tamaño de los redo logs hasta que se produzca cada media hora aproximadamente.

Poner los ficheros de mayor actividad de tu base de datos en discos físicos separados sin duda mejorará el rendimiento, pero la mayor ganancia la da siempre la revisión del código. Cosas como no usar variables enlazadas, abrir y cerrar conexiones constantemente o full table scans innecesarios pueden llegar a paralizar una base de datos oracle.

Intenta identificar las sesiones "problemáticas". Si no te manejas con herramientas como utlbstat o statspack (algo necesario, dicho sea de paso), puedes hacer algo como esto:

select username, v$sesstat.value from v$session, v$sesstat, v$statname
where v$session.sid = v$sesstat.sid and v$statname.statistic# = v$sesstat.statistic#
and v$statname.name = 'CPU used by this session'
order by v$sesstat.value desc

Otras estadísticas interesantes:
parse count (hard)
sorts (disk)
physical reads

Saludos