Resumo
This blog post explores the impact of disabling Oracle ASM Filter Driver filtering on space reclamation on a FlashArray system.
Este artigo sobre a filtragem do driver de filtro Oracle ASM apareceu originalmente no blog de Ron Ekins. Ela foi republicada com o crédito e o consentimento do autor.
Sou fã de longa data do driver de filtro (AFD, Filter Driver) Oracle ASM. Um dos principais benefícios é a filtragem AFD.
A AFD pode garantir que as gravações sejam realizadas apenas por processos Oracle confiáveis e registrados, bloqueando gravações potencialmente prejudiciais que, de outra forma, teriam resultado em corrupção de dados.
Infelizmente, uma mudança recente no kernel do Linux afetou o AFD e a recomendação mais recente do Oracle é desativar a filtragem do AFD até que uma correção esteja disponível.
No Oracle Database 19.24, a filtragem é desativada por padrão, mas para versões anteriores, a Oracle forneceu o Patch 35618858: Desative a filtragem por padrão para 5,15 Kernels e superiores.
Patches disponíveis de atualização de versão (RU, Release Update) da Oracle
- Versão 19 do Oracle Clusterware (19.23.0.0.240416ACFSRU)
- Versão 19 do Oracle Clusterware (19.24.0.0.0ACFSRU)
- Versão 19 do Oracle Clusterware (19.25.0.0.0ACFSRU)
Nesta publicação do blog, explorarei o impacto da desativação da filtragem AFD na recuperação de espaço em arrays de armazenamento totalmente flash.
Versão Kernel
Recentemente, atualizei meus servidores Oracle RAC para o Oracle Linux 8.10 usando o kernel 5.15. Você pode verificar sua versão do kernel usando o nome -r:
[oracle@z-rac1 ~]$ cat /etc/oracle-release
Oracle Linux Server release 8.10
[oracle@z-rac1 ~]$ uname -r
5.15.0-208.159.3.el8uek.x86_64
Estado do Oracle ASMFD
Podemos usar o comando asmcmd afd_state para obter o status ASM Filter Driver, por exemplo:
[oracle@z-rac1 ~]$ asmcmd afd_state
ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'z-rac1.uklab.purestorage.com'
Em um cluster RAC, use a opção asmcmd afd_state –all para ver o status de todos os nós. Todos os nós devem ter o mesmo status de filtragem.
[oracle@z-rac1 ~]$ asmcmd afd_state --all
node 'z-rac1': State of AFD: LOADED and ASMFD Filtering Status: ENABLED
node 'z-rac2': State of AFD: LOADED and ASMFD Filtering Status: DISABLED
Desative a filtragem ASMFD
Desative a filtragem usando o comando asmcmd afd_filter -d:
[oracle@z-rac1 ~]$ asmcmd afd_filter -d
[oracle@z-rac1 ~]$ asmcmd afd_state
ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'DISABLED' on host 'z-rac1.uklab.purestorage.com'
Habilite a filtragem ASMFD
Se necessário, você pode reativar a filtragem usando o comando asmcmd afd_filter -e, por exemplo:
[oracle@z-rac1 ~]$ asmcmd afd_filter -e
[oracle@z-rac1 ~]$ asmcmd afd_state
ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'z-rac1.uklab.purestorage.com'
Reclamação do espaço de armazenamento
Agora, isso levanta uma grande questão: Se eu desativar o driver de filtro ASM, perderei a capacidade de enviar comandos SCSI UNMAP de volta para um array de armazenamento totalmente flash para liberar espaço não utilizado?
OK, tenho um cluster RAC de dois nós com filtragem ASMFD DESATIVADA.
[oracle@z-rac1 ~]$ asmcmd afd_state --all
node 'z-rac1': State of AFD: LOADED and ASMFD Filtering Status: DISABLED
node 'z-rac2': State of AFD: LOADED and ASMFD Filtering Status: DISABLED
Crie o Oracle Tablespace
Para demonstrar isso, vamos criar um espaço de tabela de 4TB e esperar que a Oracle inicialize o arquivo de dados.
Vamos confirmar que não há espaço sendo usado usando minha v$asm_disk consulta:
ASMFD Disks
Disk Disk Disk Total Used Free
Nbr Name Label Header Mount State Path GB GB GB
---- ---------- ---------- ------- ------- ------- ---------- -------- -------- --------
0 DATA08 DATA08 MEMBER CACHED NORMAL AFD:DATA08 12,288 0 12,288
1 DATA07 DATA07 MEMBER CACHED NORMAL AFD:DATA07 12,288 0 12,288
2 DATA05 DATA05 MEMBER CACHED NORMAL AFD:DATA05 12,288 0 12,288
3 DATA06 DATA06 MEMBER CACHED NORMAL AFD:DATA06 12,288 0 12,288
Agora, crie o espaço de tabela Bigfile de 4TB.
SQL> create BIGFILE tablespace test datafile '+AFDATA' size 4T;
Tablespace created.
Usando a v$asm_disk consulta, posso ver que meus quatro volumes ASMFD usaram um total de 4TB conforme o esperado.
ASMFD Disks
Disk Disk Disk Total Used Free
Nbr Name Label Header Mount State Path GB GB GB
---- ---------- ---------- ------- ------- ------- ---------- -------- -------- --------
0 DATA08 DATA08 MEMBER CACHED NORMAL AFD:DATA08 12,288 1,024 11,264
1 DATA07 DATA07 MEMBER CACHED NORMAL AFD:DATA07 12,288 1,024 11,264
2 DATA05 DATA05 MEMBER CACHED NORMAL AFD:DATA05 12,288 1,024 11,264
3 DATA06 DATA06 MEMBER CACHED NORMAL AFD:DATA06 12,288 1,024 11,264
Usando o utilitário de linha de comando asmcmd com a opção de atributo de lista, vejo que o provisionamento thin está ativado no meu grupo de discos AFDATA:
[oracle@z-rac1 ~]$ asmcmd lsattr -G AFDATA -l | grep thin
thin_provisioned TRUE
Usando a CLI do FlashArray e executando o comando purevol list
lista purevol z-racpod::afd_data* –espaço –total
pureuser@z-x90-a> purevol list z-racpod::afd_data* --space --total
Name Size Virtual Thin Provisioning Data Reduction Total Reduction Unique Snapshots Total
z-racpod::afd_data05 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
z-racpod::afd_data06 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
z-racpod::afd_data07 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
z-racpod::afd_data08 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
(total) 48T 4.00T 92% >100 to 1 >100 to 1 19.79G 0.00 19.79G
Solte o Tablespace
Agora, vamos descartar o espaço de tabela Oracle usando o DROP TABLESPACE
SQL> DROP TABLESPACE test INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
Se executarmos a v$asm_view consulta novamente, a Oracle está relatando que o espaço de tabela de teste de 4TB foi liberado.
ASMFD Disks
Disk Disk Disk Total Used Free
Nbr Name Label Header Mount State Path GB GB GB
---- ---------- ---------- ------- ------- ------- ---------- -------- -------- --------
0 DATA08 DATA08 MEMBER CACHED NORMAL AFD:DATA08 12,288 0 12,288
1 DATA07 DATA07 MEMBER CACHED NORMAL AFD:DATA07 12,288 0 12,288
2 DATA05 DATA05 MEMBER CACHED NORMAL AFD:DATA05 12,288 0 12,288
3 DATA06 DATA06 MEMBER CACHED NORMAL AFD:DATA06 12,288 0 12,288
Voltando ao FlashArray da Pure Storage®, podemos ver que ainda estamos consumindo espaço, mesmo que o tablespace da Oracle tenha sido excluído.
pureuser@z-x90-a> purevol list z-racpod::afd_data* --space --total
Name Size Virtual Thin Provisioning Data Reduction Total Reduction Unique Snapshots Total
z-racpod::afd_data05 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
z-racpod::afd_data06 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
z-racpod::afd_data07 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
z-racpod::afd_data08 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
(total) 48T 4.00T 92% >100 to 1 >100 to 1 19.79G 0.00 19.79G
Fase compacta de reequilíbrio Oracle ASMFD
Ao usar o driver de filtro Oracle ASM, podemos acionar manualmente um comando SCSI UNMAP para liberar espaço de volta para a matriz de armazenamento usando o ALTER DISKGROUP
Incluí a opção opcional WAIT para retornar apenas quando estiver concluída.
SQL> ALTER DISKGROUP AFDATA REBALANCE WITH BALANCE COMPACT WAIT;
Diskgroup altered.
Se agora retornarmos à CLI do FlashArray e repetirmos o comando de
Podemos ver que, embora a filtragem AFD tenha sido desativada, o ASMFD ainda é capaz de enviar a solicitação SCSI UNMAP para a matriz de armazenamento para liberar o espaço.
pureuser@z-x90-a> purevol list z-racpod::afd_data* --space --total
z-racpod::afd_data05 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
z-racpod::afd_data06 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
z-racpod::afd_data07 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
z-racpod::afd_data08 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G
(total) 48T 4.00T 92% >100 to 1 >100 to 1 19.79G 0.00 19.79G
pureuser@z-x90-a> purevol list z-racpod::afd_data* --space --total
Name Size Virtual Thin Provisioning Data Reduction Total Reduction Unique Snapshots Total
z-racpod::afd_data05 12T 92.00M 100% 6.9 to 1 >100 to 1 9.29M 0.00 9.29M
z-racpod::afd_data06 12T 92.00M 100% 6.6 to 1 >100 to 1 10.47M 0.00 10.47M
z-racpod::afd_data07 12T 92.00M 100% 6.7 to 1 >100 to 1 9.82M 0.00 9.82M
z-racpod::afd_data08 12T 92.00M 100% 7.0 to 1 >100 to 1 8.63M 0.00 8.63M
(total) 48T 368.00M 100% 6.8 to 1 >100 to 1 38.21M 0.00 38.21M
Resumo
Nesta publicação do blog, confirmei que desativar a filtragem ASMFD não afeta a recuperação de espaço.
A equipe de desenvolvimento Oracle AFD está trabalhando ativamente em um novo mecanismo de filtragem e proteção para os kernels mencionados acima e mais recentes. Quando a nova solução de filtragem ficar disponível, tentarei compartilhar minhas descobertas.
Se quiser saber mais sobre como usar o driver de filtro ASM para recuperar espaço de armazenamento, confira esta publicação do blog.
Take a Free Test Drive
Explore FlashArray in our virtual lab.