¿Cómo añadir y remover discos eficientemente en ASM?

Añadir y remover discos a un Disk Group es lo más simple del mundo, es cuestión de tomar nota de los discos de interés, elaborar el comando, mandarlo ejecutar y esperar a que Oracle haga su magia.

Pero ¿te has puesto a pensar si realmente lo estás haciendo de la forma correcta y, sobre todo, más eficiente?

Puede que sí, o puede que no, ¡descubrámoslo!

Ya toca añadir discos

Tenemos el Disk Group DATA, con 4 discos de 1 TiB cada uno, y contamos con 4 nuevos discos que le deseamos agregar.

Sin mucho pensar, ejecutamos el siguiente comando y listo.

ALTER DISKGROUP data
ADD DISK '/dev/oracleasm/datad05' NAME dat05,
         '/dev/oracleasm/datad06' NAME dat06,
         '/dev/oracleasm/datad08' NAME dat07,
         '/dev/oracleasm/datad08' NAME dat08;

¿Remover discos? ¡Con los ojos cerrados!

Nos informan que debemos retirar los viejos discos del Disk Group DATA, ya cumplieron su vida útil.

Complicado no es, simplemente debemos ejecutar el siguiente comando y esperar.

ALTER DISKGROUP data
DROP DISK dat01, 
          dat02, 
          dat03, 
          dat04;

Vamos consultando v$asm_disk hasta que los discos viejos desaparezcan.

SELECT path, name, state 
  FROM v$asm_disk 
 ORDER BY 1
/

PATH                     NAME    STATE
------------------------ ------- ----------
/dev/oracleasm/datad01   DAT01   DROPPING
/dev/oracleasm/datad02   DAT02   DROPPING
/dev/oracleasm/datad03   DAT03   DROPPING
/dev/oracleasm/datad04   DAT04   DROPPING
/dev/oracleasm/datad06   DAT05   NORMAL
/dev/oracleasm/datad07   DAT06   NORMAL
/dev/oracleasm/datad08   DAT07   NORMAL
/dev/oracleasm/datad09   DAT08   NORMAL

El tiempo es dinero

Acabamos de ver un escenario en el cual deseamos agregar nuevos discos y remover los antiguos. Para este caso específico Oracle nos recomienda ejecutarlo todo en un solo comando

Podemos ejecutar las sentencias add disk y drop disk en una sola operación, de esta forma sólo se iniciará una operación de Rebalanceo. Esto es más eficiente que ejecutar comandos separados.

En pocas palabras, ejecutar algo como:

ALTER DISKGROUP data
ADD DISK '/dev/oracleasm/datad05' NAME dat05,
         '/dev/oracleasm/datad06' NAME dat06,
         '/dev/oracleasm/datad08' NAME dat07,
         '/dev/oracleasm/datad08' NAME dat08
DROP DISK dat01, 
          dat02, 
          dat03, 
          dat04;

Para saber qué tan beneficioso es hacerlo de esta forma tomé los tiempos; los resultados hablan por sí solos: una reducción en tiempos del orden del 60% ( 212 vs 82 minutos). 

¿Cómo se puede reducir tanto el tiempo? ¿Cuál es el truco?

Solo diré una palabra: compactación.

Compactación

Oracle nos ha explicado que ejecutar add disk y drop disk en un solo comando es más eficiente debido a que se ejecuta un solo Rebalanceo.

La documentación nos señala que una primera etapa consiste en copiar los bloques entre los discos que estamos trabajando, conocida como REBALANCE, y una etapa final llamada COMPACT, que es explicada así:

La fase de compactación forma parte de la operación de Rebalance y desplaza los datos lo más cerca posible de las pistas exteriores de los discos.
Los datos deben agruparse cerca de las pistas de mayor rendimiento del disco, lo que reduce el tiempo de búsqueda.

Entonces, Oracle ejecuta la fase COMPACT como una forma de reorganizar los datos para que estén en las partes del disco con mejor desempeño, lo cual suena razonable y hasta deseable, pero en estos tiempos en los que ya no usamos discos convencionales sino discos flash, sigue siéndolo?

Nuevamente Oracle tiene la respuesta:

Esta fase desfragmenta y compacta extensiones en los discos Oracle ASM.
Si utilizas Disk Groups con almacenamiento flash o Disk Groups con flash cache, puedes excluir la fase COMPACT, ya que no es beneficiosa para dichos Disk Groups.

Luego, si no estamos usando discos convencionales, no tiene sentido que Oracle ejecute la fase COMPACT, y podemos evitarla añadiendo rebalance without compact a los comandos add disk y drop disk:

ALTER DISKGROUP data
ADD DISK '/dev/oracleasm/datad05' NAME dat05,
         '/dev/oracleasm/datad06' NAME dat06,
         '/dev/oracleasm/datad08' NAME dat07,
         '/dev/oracleasm/datad08' NAME dat08
DROP DISK dat01, 
          dat02, 
          dat03, 
          dat04
REBALANCE WITHOUT COMPACT;

Para medir el impacto tomé los tiempos nuevamente, tanto para add disk y drop disk por separado, add disk y drop disk juntos y add disk y drop disk juntos pero sin COMPACT.

A continuación los resultados:

Lo primero que notamos es que al ejecutar add disk y drop disk por separado, el grueso del tiempo (aproximadamente el 60%) se va en la fase COMPACT.

Luego notamos que al ejecutar add disk y drop disk juntos el tiempo invertido en COMPACT es mucho menor (aproximadamente el 15%).

Por último, resulta evidente que al ejecutar add disk y drop disk juntos pero sin COMPACT el tiempo total es el menor de todos.

Conclusiones

  1. Al añadir o remover discos de un Disk Group, la fase COMPACT juega un rol importante: requiere de tiempo adicional para su ejecución, pero promete mejoras en el desempeño a futuro.
  2. Si lo que deseas es reemplazar unos discos por otros, te conviene ejecutar add disk y drop disk en una misma sentencia.
  3. Si ya no usas discos convencionales te conviene evitar la fase COMPACT, no solo al reemplazarlos (add disk y drop disk en simultáneo), sino especialmente cuando todo lo que necesitas es añadirlos, ya que—como se observa en el siguiente gráfico—puedes reducir el tiempo en casi 80% (169 vs 38 minutos).
  4. Si todo lo que deseas es remover discos parece no tener mucho efecto el evitar la fase COMPACT.

Finalmente, es necesario precisar que los resultados exhibidos han sido obtenidos en un escenario en el cual los discos originales estaban llenos al 40%.

Las mismas pruebas cuando los discos están llenos al 95% evidencian que la fase COMPACT tiene menos relevancia en los tiempos totales, esto debido a que como su objetivo es desfragmentar y mover los datos hacia lo que Oracle considera las partes más externas de los discos, si estos están casi llenos no queda mucho por procesar, ¿lógico no?

Espero que lo expuesto te sirva para la siguiente vez que te toque añadir o remover discos de algún Disk Group, y si puedes, comparte tus resultados en la sección de Comentarios.

Para complementar lo aquí expuesto, les recomiendo la lectura de las notas:

837308.1

Exact Steps To Migrate ASM Diskgroups To Another SAN/Disk-Array/DAS/etc Without Downtime.

1902001.1

What is ASM rebalance compact Phase and how it can be disabled

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o ¡contáctame ahora mismo!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Posts Relacionados

Sobre cómo un error causado por ejecutar analyze a una tabla con indices unusable es resuelto con expresiones regulares y dbms_stats.
Qué hacer cuando Oracle reporta un valor incorrecto para el espacio usado en Fast Recovery Area.
Aprenda a resolver y evitar el error ORA-01017 cuando tenga implementado Oracle Data Guard con wallet.

¿Necesitas Ayuda?

Completa estos datos y estaré en contacto a la brevedad.