UNDOMonitoreoyTunning
Páginas: 17 (4040 palabras)
Publicado: 20 de marzo de 2015
10gR2
El crecimiento indiscriminado del tablespace de UNDO puede volverse un gran problema,
además de indicarnos que algo no anda bien, por otro lado un UNDO muy pequeño puede
significar que ciertas instrucciones no terminen correctamente arrojando el siguiente error:
ORA-01555 snapshot too old: rollback segment number [string] with name
"[string]" toosmall
A continuación algunas formas para monitorear el estado del UNDO, las transacciones que más
UNDO requieren y técnicas para setear el tamaño más adecuado.
Primero revisaremos los parámetros referentes al UNDO:
SQL> sho parameters undo
NAME
-----------------------------------undo_management
undo_retention
undo_tablespace
SQL>
TYPE
----------string
integer
string
VALUE
---------------AUTO
900UNDOTBS1
UNDO_MANAGEMENT: Parámetro dinámico (Alter system set undo_management =
disponible desde 9i y que libera a los DBA de la administración y monitoreo del UNDO.
UNDO_RETENTION: Parámetro dinámico (alter system set undo_retention=
en segundos (por defecto 900) cuanto tiempo ha de permanecer, al menos, la información de
UNDO disponible.
UNDO_TABLESPACE: Parámetrodinámico (alter system ...) que indica el espacio de
almacenamiento de “UNDO” a usar en el arranque. Si se indica en modo manual, provoca error
y falla el arranque.
Para este caso setearemos la retención de UNDO a 600 segundos:
SQL> alter system set undo_retention=600;
Segmentos de UNDO
Con la siguiente query podemos ver el estado de los segmentos de UNDO:
SELECT SYSDATE AS fecha,unexpired.unexpired,
expired.expired,
active.active
FROM
(SELECT Sum(bytes / 1024 / 1024) AS unexpired
FROM
dba_undo_extents
WHERE status = 'UNEXPIRED') unexpired,
(SELECT Sum(bytes / 1024 / 104) AS expired
FROM
dba_undo_extents tr
WHERE status = 'EXPIRED') expired,
(SELECT CASE
WHEN Count(status) = 0
THEN 0
ELSE Sum(bytes / 1024 / 1024)
END AS active
FROM
dba_undo_extents
WHERE status = 'ACTIVE') active
Porejemplo el resultado para esta prueba es:
Resultado:
FECHA
UNEXPIRED EXPIRED ACTIVE
14-05-2009 17:16:43
0,125
10,25
0
Donde,
UNEXPIRED significa que estos segmentos de UNDO no contienen ninguna transacción activa,
pero estos contienen transacciones que todavía son requeridos para FLASHBACK.
EXPIRED significa que estos segmentos no son requeridos después del periodo de retención
definido enundo_retention.
ACTIVE significa que estos segmentos de UNDO contienen transacciones activas, o sea, no se
ha realizado commit.
Los valores son en MB. He creado una tabla llamada undo_utilizado donde se guarda el
retorno de esta query cada 20 segundos para luego realizar un a análisis más fino.
Por ejemplo ejecutaremos un insert sin dar commit:
SQL> set
17:39:04
17:39:06
17:39:06
time on
SQL>
SQL>
SQL>@insert.sql
547306 rows created.
17:39:15 SQL>
El comportamiento de los segmentos de UNDO es:
SELECT
*
FROM
test.undo_utilizado
ORDER BY fecha DESC;
Resultado:
FECHA
UNEXPIRED EXPIRED ACTIVE
14-05-2009 17:44:23
0,0625 10,125 2,9375
14-05-2009 17:44:03
0,0625 10,125 2,9375
14-05-2009 17:43:43
0,0625 10,125 2,9375
14-05-2009 17:43:23
0,0625 10,125 3,9375
14-05-2009 17:43:03
0,0625 10,125 2,9375Como se puede observar, actualmente existen 2,9375 MB de segmentos en estado ACTIVE y
0,0625 MB en estado UNEXPIRED. Si ejecutamos un commit para la sesión ocurre lo siguiente:
17:44:59 SQL> commit;
Commit complete.
17:45:01 SQL>
SELECT
*
FROM
test.undo_utilizado
ORDER BY fecha DESC;
Resultado:
FECHA
UNEXPIRED EXPIRED ACTIVE
14-05-2009 17:45:23
3 10,125
0
14-05-2009 17:45:03
3 10,125
014-05-2009 17:44:43
0,0625 10,125 2,9375
14-05-2009 17:44:23
0,0625 10,125 2,9375
14-05-2009 17:44:03
0,0625 10,125 2,9375
Como se puede observar, luego de realizar commit, ya no existen segmentos en estado ACTIVE
y estos pasaron a ser segmentos en estado UNEXPIRED.
En el tablespace de UNDO, los segmentos en estado UNEXPIRED significan espacio utilizado.
Un análisis de lo ocurrido con el siguiente...
Leer documento completo
Regístrate para leer el documento completo.