Resumen
This blog post explores the impact of disabling Oracle ASM Filter Driver filtering on space reclamation on a FlashArray system.
Este artículo sobre el filtrado del Controlador de Filtros Oracle ASM apareció originalmente en el blog de Ron Ekins. Se ha vuelto a publicar con el reconocimiento y el consentimiento del autor.
Soy fan desde hace mucho tiempo del Controlador de Filtros (AFD) Oracle ASM. Una de sus mayores ventajas es el filtrado AFD.
La AFD puede garantizar que las escrituras solo se realizan mediante procesos de Oracle de confianza y registrados, bloqueando las escrituras potencialmente dañinas que de otro modo hubieran provocado daños en los datos.
Lamentablemente, un cambio reciente en el núcleo de Linux ha afectado a la AFD y la última recomendación de Oracle es desactivar el filtrado de la AFD hasta que haya una solución disponible.
Desde Oracle Database 19.24, el filtrado está desactivado de manera predeterminada, pero para las versiones anteriores, Oracle ha proporcionado el parche 35618858: Desactive el Filtrado por defecto para 5,15 Kernels y superiores.
Parches de actualización de lanzamiento de Oracle (RU) disponibles
- Lanzamiento de Oracle Clusterware 19 (19.23.0.0.240416ACFSRU)
- Lanzamiento de Oracle Clusterware 19 (19.24.0.0.0ACFSRU)
- Lanzamiento de Oracle Clusterware 19 (19.25.0.0.0ACFSRU)
En esta entrada del blog, exploraré el impacto de desactivar el filtrado AFD en la recuperación del espacio en las cabinas de almacenamiento totalmente flash.
Versión de Kernel
Recientemente he actualizado mis servidores Oracle RAC a Oracle Linux 8.10 usando kernel 5.15. Puede comprobar su versión de kernel usando unme -r:
1 |
[oracle@z–rac1 ~]$ cat /etc/oracle–release |
1 |
Oracle Linux Server release 8.10 |
1 |
[oracle@z–rac1 ~]$ <strong>uname –r</strong> |
1 |
5.15.0–208.159.3.el8uek.x86_64 |
Estado de Oracle ASMFD
Podemos usar el comando asmcmd afd_state para obtener el estado del controlador de filtro ASM, por ejemplo:
1 |
[oracle@z–rac1 ~]$ asmcmd afd_state |
1 |
ASMCMD–9526: The AFD state is ‘LOADED’ and filtering is ‘ENABLED’ on host ‘z-rac1.uklab.purestorage.com’ |
En un clúster RAC, use la opción asmcmd afd_state –all para ver el estado de todos los nodos. Todos los nodos deben tener el mismo estado de filtrado.
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_state —all</strong> |
1 |
node ‘z-rac1’: State of AFD: LOADED and ASMFD Filtering Status: ENABLED |
1 |
node ‘z-rac2’: State of AFD: LOADED and ASMFD Filtering Status: DISABLED |
Deshabilitar el filtrado de ASMFD
Desactive el filtrado usando el comando asmcmd afd_filter -d:
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_filter –d</strong> |
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_state</strong> |
1 |
ASMCMD–9526: The AFD state is ‘LOADED’ and filtering is ‘DISABLED’ on host ‘z-rac1.uklab.purestorage.com’ |
Habilitar el filtrado ASMFD
Si es necesario, puede volver a habilitar el filtrado usando el comando asmcmd afd_filter -e, por ejemplo:
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_filter –e</strong> |
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_state</strong> |
1 |
ASMCMD–9526: The AFD state is ‘LOADED’ and filtering is ‘ENABLED’ on host ‘z-rac1.uklab.purestorage.com’ |
Reclamación del espacio de almacenamiento
Esto plantea una gran pregunta: Si deshabilito el controlador de filtro ASM, ¿perdo la capacidad de enviar comandos SCSI UNMAP a una cabina de almacenamiento totalmente flash para liberar espacio no utilizado?
Bien, tengo un clúster RAC de dos nodos con filtro ASMFD DESACTIVADO.
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_state —all</strong> |
1 |
node ‘z-rac1’: State of AFD: LOADED and ASMFD Filtering Status: DISABLED |
1 |
node ‘z-rac2’: State of AFD: LOADED and ASMFD Filtering Status: DISABLED |
Crear Oracle Tablespace
Para demostrarlo, vamos a crear un espacio de tabla de 4TB y a esperar a que Oracle inicialice el archivo de datos.
Confirmemos que no se utiliza espacio usando mi v$asm_disk consulta:
1 |
ASMFD Disks |
1 |
Disk Disk Disk Total Used Free |
1 |
Nbr Name Label Header Mount State Path GB GB GB |
1 |
—— ————— ————— ———– ———– ———– ————— ———— ———— ———— |
1 |
0 DATA08 DATA08 MEMBER CACHED NORMAL AFD:DATA08 12,288 0 12,288 |
1 |
1 DATA07 DATA07 MEMBER CACHED NORMAL AFD:DATA07 12,288 0 12,288 |
1 |
2 DATA05 DATA05 MEMBER CACHED NORMAL AFD:DATA05 12,288 0 12,288 |
1 |
3 DATA06 DATA06 MEMBER CACHED NORMAL AFD:DATA06 12,288 0 12,288 |
Y ahora cree el espacio de tabla de bigfile de 4TB.
1 |
SQL> <strong>create BIGFILE tablespace test datafile ‘+AFDATA’ size 4T;</strong> |
1 |
Tablespace created. |
Usando la v$asm_disk consulta, puedo ver que mis cuatro volúmenes ASMFD se han utilizado en total 4TB como se esperaba.
1 |
ASMFD Disks |
1 |
Disk Disk Disk Total Used Free |
1 |
Nbr Name Label Header Mount State Path GB GB GB |
1 |
—— ————— ————— ———– ———– ———– ————— ———— ———— ———— |
1 |
0 DATA08 DATA08 MEMBER CACHED NORMAL AFD:DATA08 12,288 1,024 11,264 |
1 |
1 DATA07 DATA07 MEMBER CACHED NORMAL AFD:DATA07 12,288 1,024 11,264 |
1 |
2 DATA05 DATA05 MEMBER CACHED NORMAL AFD:DATA05 12,288 1,024 11,264 |
1 |
3 DATA06 DATA06 MEMBER CACHED NORMAL AFD:DATA06 12,288 1,024 11,264 |
Usando la utilidad de línea de comandos asmcmd con la opción de atributo de lista, veo que el aprovisionamiento fino está habilitado en mi grupo de discos AFDATA:
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd lsattr –G AFDATA –l | grep thin</strong> |
1 |
thin_provisioned TRUE |
Usando la CLI de FlashArray™ y realizando el comando purevol list
lista purevol z-racpod::afd_data* –espacio –total
1 |
pureuser@z–x90–a> <strong>purevol list z–racpod::afd_data* —space —total</strong> |
1 |
Name Size Virtual Thin Provisioning Data Reduction Total Reduction Unique Snapshots Total |
1 |
z–racpod::afd_data05 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data06 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data07 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data08 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
(total) 48T 4.00T 92% >100 to 1 >100 to 1 19.79G 0.00 19.79G |
Soltar espacio de tabla
Ahora dejemos caer el espacio de tabla de Oracle usando DROP TABLESPACE
1 |
SQL> <strong>DROP TABLESPACE test INCLUDING CONTENTS AND DATAFILES;</strong> |
1 |
Tablespace dropped. |
Si volvemos a ejecutar la v$asm_view consulta, Oracle informa ahora de que se ha publicado el espacio de tabla de prueba de 4TB.
1 |
ASMFD Disks |
1 |
Disk Disk Disk Total Used Free |
1 |
Nbr Name Label Header Mount State Path GB GB GB |
1 |
—— ————— ————— ———– ———– ———– ————— ———— ———— ———— |
1 |
0 DATA08 DATA08 MEMBER CACHED NORMAL AFD:DATA08 12,288 0 12,288 |
1 |
1 DATA07 DATA07 MEMBER CACHED NORMAL AFD:DATA07 12,288 0 12,288 |
1 |
2 DATA05 DATA05 MEMBER CACHED NORMAL AFD:DATA05 12,288 0 12,288 |
1 |
3 DATA06 DATA06 MEMBER CACHED NORMAL AFD:DATA06 12,288 0 12,288 |
Volviendo a FlashArray de Pure Storage®, podemos ver que seguimos consumiendo espacio aunque se haya borrado el espacio de tabla de Oracle.
1 |
pureuser@z–x90–a> <strong>purevol list z–racpod::afd_data* —space —total</strong> |
1 |
Name Size Virtual Thin Provisioning Data Reduction Total Reduction Unique Snapshots Total |
1 |
z–racpod::afd_data05 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data06 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data07 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data08 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
(total) 48T 4.00T 92% >100 to 1 >100 to 1 19.79G 0.00 19.79G |
Fase compacta de reequilibrio Oracle ASMFD
Cuando se utiliza Oracle ASM Filter Driver, podemos activar manualmente un comando SCSI UNMAP para liberar espacio en la cabina de almacenamiento usando ALTER DISKGROUP
He incluido la opción opcional de ESPERAR para que solo vuelva una vez completado.
1 |
SQL> <strong>ALTER DISKGROUP AFDATA REBALANCE WITH BALANCE COMPACT WAIT;</strong> |
1 |
Diskgroup altered. |
Si ahora volvemos a la CLI de FlashArray y repetimos el comando purevol list
Podemos ver que, aunque el filtrado AFD se ha desactivado, ASMFD sigue siendo capaz de enviar la solicitud SCSI UNMAP a la cabina de almacenamiento para liberar el espacio.
1 |
pureuser@z–x90–a> <strong>purevol list z–racpod::afd_data* —space —total</strong> |
1 |
z–racpod::afd_data05 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data06 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data07 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data08 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
(total) 48T 4.00T 92% >100 to 1 >100 to 1 19.79G 0.00 19.79G |
1 |
pureuser@z–x90–a> <strong>purevol list z–racpod::afd_data* —space —total</strong> |
1 |
Name Size Virtual Thin Provisioning Data Reduction Total Reduction Unique Snapshots Total |
1 |
z–racpod::afd_data05 12T 92.00M 100% 6.9 to 1 >100 to 1 9.29M 0.00 9.29M |
1 |
z–racpod::afd_data06 12T 92.00M 100% 6.6 to 1 >100 to 1 10.47M 0.00 10.47M |
1 |
z–racpod::afd_data07 12T 92.00M 100% 6.7 to 1 >100 to 1 9.82M 0.00 9.82M |
1 |
z–racpod::afd_data08 12T 92.00M 100% 7.0 to 1 >100 to 1 8.63M 0.00 8.63M |
1 |
(total) 48T 368.00M 100% 6.8 to 1 >100 to 1 38.21M 0.00 38.21M |
Resumen
En esta entrada del blog, he confirmado que desactivar el filtrado ASMFD no afecta a la recuperación del espacio.
El equipo de desarrollo de Oracle AFD está trabajando activamente en un nuevo mecanismo de filtrado y protección para los núcleos mencionados anteriormente y los más nuevos. Cuando la nueva solución de filtrado esté disponible, la probaré y compartiré mis hallazgos.
Si desea obtener más información sobre el uso del controlador de filtro ASM para recuperar el espacio de almacenamiento, consulte esta entrada del blog.
Take a Free Test Drive
Explore FlashArray in our virtual lab.