Como redimensionar REDOLOG FILE
Hace algunos dias estuvimos trabajando en el redimensionamiento de los redo log file.
Que nos llevo a tomar esta decisión ?
La aplicación ESB (Enterprise Service Bus) que tenemos en una entidad financiera puso en funcionamiento un nuevo canal sin previo aviso, generando una gran cantidad de transacciones, aumentado notablemente el commit.
Esto provoco que se incrementara la cantidad de log switch y que el espacio dimensionado de los REDOLOGS no sea suficiente. Obviamente impacto notablemente en la performance de la base de datos.
Cual era el escenario ?
- 8 REDO GROUPS
- 4 REDO THREADS
- 50 MB el volumen de los Redo Logs Files
SQL> set line 150 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 1 1 1795 52428800 2 YES INACTIVE 1770421689 30-MAY-11 2 1 1796 52428800 2 NO CURRENT 1770770352 31-MAY-11 3 2 1429 52428800 2 YES INACTIVE 1770671024 30-MAY-11 4 2 1430 52428800 2 NO CURRENT 1770770347 31-MAY-11 5 3 871 52428800 2 YES INACTIVE 1770714581 30-MAY-11 6 3 872 52428800 2 NO CURRENT 1770770350 31-MAY-11 7 4 853 52428800 2 NO CURRENT 1770770342 31-MAY-11 8 4 852 52428800 2 YES INACTIVE 1770421681 30-MAY-11 8 rows selected.
Plan de Acción
Lo que que hay que realizar como tareas los resumimos en los siguientes puntos:
- Agregar Grupos Nuevos que llamaremos administrativos. (Recordemos que debemos tener como minimo debemos tener dos miembros por cada grupo)
- Switchear para que los grupos entren en modo ARC=YES STATUS=INACTIVE
- Eliminar Grupos Dispobibles. (Elijo los pares)
- Agregar Grupos (Grupos Pares) con el Nuevo Volumen.
- Eliminar Grupos Dispobibles. (Elijo los impares)
- Agregar Grupos (Grupos Impares) con el Nuevo Volumen.
- Eliminar Grupos Creados
- Eliminamos Grupos Administrativos.
Estas tareas podemos hacerlo con la base online sin tener que hacer un shutdown a la base .
El primer paso implica verificar que el status de los REDOLOGS de la base sea INACTIVE.
Vamos a revisar con la siguiente query como se encuentra
SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 INACTIVE 2 CURRENT 3 INACTIVE 4 CURRENT 5 INACTIVE 6 CURRENT 7 CURRENT 8 INACTIVE 8 rows selected. SQL>
Como primer paso vamos a crear los REDOLOGS que llamamos administrativos, que nos permiten rotar y principalmente poder eliminar los grupos que vayamos a ridemensionar. Esto es importantante ya que por lo menos precisamos dos Grupos, si no incurriremos en el error ORA-01567
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 9 SIZE 512M; Database altered. SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 10 SIZE 512M; Database altered. SQL> ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 11 SIZE 512M; Database altered. SQL> ALTER DATABASE ADD LOGFILE THREAD 4 GROUP 12 SIZE 512M; Database altered. SQL>
En un segundo paso podemos consultar los REDOLOGS creados , los antiguos y en que STATUS se encuentran.
De esta manera podemos conocer cuales tenemos disponibles para dropear.
Como paso previo hice mover los REDOLOGS, para que no tuvieran STATUS = UNUSED y se llenaran con la sentencia.
ALTER SYSTEM SWITCH LOGFILE;
Esto también provoco el cambio de STATUS de los demás grupos.
Veamos como quedo.
SQL> set line 150 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 1 1 1801 52428800 2 NO CURRENT 1771100462 01-JUN-11 2 1 1799 52428800 2 YES INACTIVE 1770977996 31-MAY-11 3 2 1432 52428800 2 NO CURRENT 1771100464 01-JUN-11 4 2 1430 52428800 2 YES INACTIVE 1770770347 31-MAY-11 5 3 874 52428800 2 NO CURRENT 1771100467 01-JUN-11 6 3 872 52428800 2 YES INACTIVE 1770770350 31-MAY-11 7 4 856 52428800 2 NO CURRENT 1771100460 01-JUN-11 8 4 855 52428800 2 YES INACTIVE 1771031333 31-MAY-11 9 1 1800 536870912 2 YES INACTIVE 1771031159 31-MAY-11 10 2 1431 536870912 2 YES INACTIVE 1770977989 31-MAY-11 11 3 873 536870912 2 YES INACTIVE 1770977992 31-MAY-11 12 4 854 536870912 2 YES INACTIVE 1770977985 31-MAY-11 12 rows selected. SQL>
Como podemos observar tenemos como STATUS = INACTIVE los grupos 2 4 6 8 de los viejos con dimensión 50MB, como asi también los grupos nuevos 9 10 11 12 de 500MB.
2 1 1799 52428800 2 YES INACTIVE 1770977996 31-MAY-11 4 2 1430 52428800 2 YES INACTIVE 1770770347 31-MAY-11 6 3 872 52428800 2 YES INACTIVE 1770770350 31-MAY-11 8 4 855 52428800 2 YES INACTIVE 1771031333 31-MAY-11 9 1 1800 536870912 2 YES INACTIVE 1771031159 31-MAY-11 10 2 1431 536870912 2 YES INACTIVE 1770977989 31-MAY-11 11 3 873 536870912 2 YES INACTIVE 1770977992 31-MAY-11 12 4 854 536870912 2 YES INACTIVE 1770977985 31-MAY-11
Con este escenario voy a proceder a realizar los DROPEOS de los grupos que tienen el valor de 50MB.
SQL> ALTER DATABASE DROP LOGFILE GROUP 2; Database altered. SQL> ALTER DATABASE DROP LOGFILE GROUP 4; Database altered. SQL> ALTER DATABASE DROP LOGFILE GROUP 6; Database altered. SQL> ALTER DATABASE DROP LOGFILE GROUP 8; Database altered. SQL>
Observemos los grupos que quedan.
SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 1 1 1801 52428800 2 NO CURRENT 1771100462 01-JUN-11 3 2 1432 52428800 2 NO CURRENT 1771100464 01-JUN-11 5 3 874 52428800 2 NO CURRENT 1771100467 01-JUN-11 7 4 856 52428800 2 NO CURRENT 1771100460 01-JUN-11 9 1 1800 536870912 2 YES INACTIVE 1771031159 31-MAY-11 10 2 1431 536870912 2 YES INACTIVE 1770977989 31-MAY-11 11 3 873 536870912 2 YES INACTIVE 1770977992 31-MAY-11 12 4 854 536870912 2 YES INACTIVE 1770977985 31-MAY-11 8 rows selected.
Quedaron solo los GRUPOS 1 3 5 7 con dimensión de 50MB y los nuevos que usaremos como modo administrativo.
Agregamos los grupos 2 4 6 8 con la nueva dimensión de 500MB.
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 2 SIZE 512M; Database altered. SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 4 SIZE 512M; Database altered. SQL> ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 6 SIZE 512M; Database altered. SQL> ALTER DATABASE ADD LOGFILE THREAD 4 GROUP 8 SIZE 512M; Database altered.
Observamos que los nuevos grupos fueron creados y se encuentran con STATUS = UNUSED.
SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 1 1 1805 52428800 2 NO CURRENT 1771231012 01-JUN-11 2 1 0 536870912 2 YES UNUSED 0 3 2 1432 52428800 2 YES ACTIVE 1771100464 01-JUN-11 4 2 0 536870912 2 YES UNUSED 0 5 3 874 52428800 2 YES ACTIVE 1771100467 01-JUN-11 6 3 0 536870912 2 YES UNUSED 0 7 4 858 52428800 2 NO CURRENT 1771231012 01-JUN-11 8 4 0 536870912 2 YES UNUSED 0 9 1 1804 536870912 2 YES INACTIVE 1771231003 01-JUN-11 10 2 1433 536870912 2 NO CURRENT 1771231009 01-JUN-11 11 3 875 536870912 2 NO CURRENT 1771231006 01-JUN-11 12 4 857 536870912 2 YES INACTIVE 1771230999 01-JUN-11 12 rows selected.
Hacemos correr los LOGS para poner en STATUS = INACTIVE los candidatos 1 3 5 7 para ser dropeados.
SQL> ALTER SYSTEM SWITCH LOGFILE; System altered. SQL> ALTER SYSTEM SWITCH LOGFILE; System altered. SQL> ALTER SYSTEM SWITCH LOGFILE; System altered. SQL> ALTER SYSTEM SWITCH LOGFILE; System altered.
Vuelvo a consultar , y nos queda el escenario nuevamente listo para dropear los candidatos.
SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 1 1 1814 52428800 2 YES INACTIVE 1771252364 01-JUN-11 2 1 1815 536870912 2 YES INACTIVE 1771252371 01-JUN-11 3 2 1435 52428800 2 YES INACTIVE 1771252107 01-JUN-11 4 2 1437 536870912 2 NO CURRENT 1771252369 01-JUN-11 5 3 877 52428800 2 YES INACTIVE 1771252113 01-JUN-11 6 3 879 536870912 2 NO CURRENT 1771272936 01-JUN-11 7 4 861 52428800 2 YES INACTIVE 1771252347 01-JUN-11 8 4 862 536870912 2 NO CURRENT 1771252369 01-JUN-11 9 1 1816 536870912 2 NO CURRENT 1771272935 01-JUN-11 10 2 1436 536870912 2 YES INACTIVE 1771252347 01-JUN-11 11 3 878 536870912 2 YES INACTIVE 1771252369 01-JUN-11 12 4 860 536870912 2 YES INACTIVE 1771251877 01-JUN-11 12 rows selected. SQL> ALTER DATABASE DROP LOGFILE GROUP 2; Database altered. SQL> ALTER DATABASE DROP LOGFILE GROUP 3; Database altered. SQL> ALTER DATABASE DROP LOGFILE GROUP 5; Database altered. SQL> ALTER DATABASE DROP LOGFILE GROUP 7; Database altered. SQL>
Agregamos los grupos nuevos correspondientes a la serie 1 3 5 7.
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 1 SIZE 512M; Database altered. SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 3 SIZE 512M; Database altered. SQL> ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 5 SIZE 512M; Database altered. SQL> ALTER DATABASE ADD LOGFILE THREAD 4 GROUP 7 SIZE 512M; Database altered.
Una vez que tenemos todos los grupos redimensionados podemos hacer correr los logs nuevamente y eliminar los grupos que usamos como administrativos que se corresponden con la serie 9 10 11 12 .
SQL> ALTER DATABASE DROP LOGFILE GROUP 9 ; Database altered. SQL> ALTER DATABASE DROP LOGFILE GROUP 10 ; Database altered. SQL> ALTER DATABASE DROP LOGFILE GROUP 11 ; Database altered. SQL> ALTER DATABASE DROP LOGFILE GROUP 12 ; Database altered.
Resultado Final, REDOLOGS de 500MB y nuestros problemas de performance resueltos.
SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 1 1 1838 536870912 2 YES INACTIVE 1771633054 02-JUN-11 2 1 1839 536870912 2 NO CURRENT 1771633057 02-JUN-11 3 2 1444 536870912 2 YES INACTIVE 1771632828 02-JUN-11 4 2 1445 536870912 2 NO CURRENT 1771633063 02-JUN-11 5 3 888 536870912 2 YES INACTIVE 1771633031 02-JUN-11 6 3 889 536870912 2 NO CURRENT 1771633057 02-JUN-11 7 4 874 536870912 2 NO CURRENT 1771633057 02-JUN-11 8 4 873 536870912 2 YES INACTIVE 1771633044 02-JUN-11 8 rows selected.SQL>
Como llego a la conclusión de que el problema quedo resuelto ?
Por que al principio tome un reporte de AWR y lo compare con otro reporte AWR que tome al final, luego de haber dejado correr durante un periodo los cambios.
One thought on “Oracle Tunning | How to change the Redo Log File size”
Comments are closed.