Processamento completo do espaço de tabela ORACLE 11G SYSAUX e a diferença entre mover e encolher

Hoje, recebi um alarme de que o espaço de tabela 11G SYSAUX excede 90% A ideia anterior era simplesmente adicionar arquivos de dados, porque o espaço de armazenamento não é de dados comerciais e o espaço de tabela pode ser compactado por meio de configuração.

Verifique o que está ocupando o tablespace SYSAUX

SELECT occupant_name "Item",
       space_usage_kbytes / 1048576 "Space Used (GB)",
       schema_name "Schema",
       move_procedure "Move Procedure"
  FROM v$sysaux_occupants
 ORDER BY space_usage_kbytes DESC;

Espaço ocupado por cada segmento no tablespace SYSAUX

SELECT *
  FROM (SELECT owner, segment_name, segment_type, SUM(bytes) / 1024 / 1024 / 1024 GB
          FROM dba_segments
         WHERE tablespace_name = 'SYSAUX'
         GROUP BY owner, segment_name, segment_type
         ORDER BY 4 DESC)
 WHERE rownum < 10

Verifica-se que a tabela com maior ocupação é WRI$_OPTSTAT_HISTGRM_HISTORY e os dois índices acima dela

Processamento de alta pegada SM/OPTSTAT

Verifica-se que SM/OPTSTAT, ou seja, a informação estatística ocupa um espaço elevado.

Depois de verificar se o sistema reteve 31 dias de informação estatística, não há necessidade de usar um valor tão alto:

select dbms_stats.get_stats_history_retention from dual; 

O primeiro horário para visualizar as estatísticas:

select dbms_stats.get_stats_history_availability from dual;

Para definir a retenção por 10 dias:

EXEC dbms_stats.alter_stats_history_retention(10);  

Em seguida, exclua os dados antes de dez dias:

--对于几十G的数据来说,这个sql比较耗时,需要在业务清闲时执行
exec dbms_stats.purge_stats(sysdate-10);

tratamento de água alta

Após a operação de limpeza acima, descobriu-se que a taxa de ocupação do espaço não caiu, porque o procedimento armazenado de limpeza dbms_stats.purge_stats(sysdate-10) é essencialmente delete sql para excluir dados e a marca d'água alta precisa ser limpa. Consulte o documento oficial ORACLE Doc ID 454678.1

--业务空闲时间段执行
1- Take a full backup of the database
2- Move the tables:

SQL> alter table WRI$_OPTSTAT_TAB_HISTORY move;
SQL> alter table WRI$_OPTSTAT_OPR move;
SQL> alter table WRI$_OPTSTAT_IND_HISTORY move;
SQL> alter table WRI$_OPTSTAT_HISTHEAD_HISTORY move;
SQL> alter table WRI$_OPTSTAT_HISTGRM_HISTORY move;
SQL> alter table WRI$_OPTSTAT_AUX_HISTORY move;

3- For indexes, find the indexes for the above tables and rebuild them. In case an index is unusable, please see the following example:

SQL> select status from dba_indexes where index_name='I_WRI$_OPTSTAT_IND_OBJ#_ST';
SQL> select status from dba_indexes where index_name='I_WRI$_OPTSTAT_TAB_ST';

Assuming that indexes: I_WRI$_OPTSTAT_IND_OBJ#_ST & I_WRI$_OPTSTAT_TAB_ST are unusable, then, we have to do the following:

a.Determine the DDL's for the indexes using dbms_metadata package as shown in the example below
 SQL> set long 4000
 SQL> select dbms_metadata.get_ddl('INDEX','I_WRI$_OPTSTAT_IND_OBJ#_ST','SYS') from dual;
 SQL> select dbms_metadata.get_ddl('INDEX','I_WRI$_OPTSTAT_TAB_ST','SYS') from dual;
   
b.Then drop and recreate the indexes using the obtained DDL's.
   
c.Once done you can confirm the status by running the following query for example :
SQL> select status from dba_indexes where index_name='I_WRI$_OPTSTAT_IND_OBJ#_ST';
SQL> select status from dba_indexes where index_name='I_WRI$_OPTSTAT_TAB_ST';

4- To ensure that statistics history will be retained for at least 8 days:

SQL> exec dbms_stats.alter_stats_history_retention(8); 

Ou execute apenas uma reconstrução de índice online para a tabela WRI$_OPTSTAT_HISTGRM_HISTORY

SQL> alter table WRI$_OPTSTAT_HISTGRM_HISTORY move;
 
Table altered.
 
SQL> alter index I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST rebuild online;
 
Index altered.
 
SQL> alter index I_WRI$_OPTSTAT_H_ST rebuild online;
 
Index altered.

SQL> exec dbms_stats.alter_stats_history_retention(8); 

P.S. A diferença entre mover e encolher

encolher

A premissa do encolhimento é habilitar a migração de linha primeiro.

 alter table WRI$_OPTSTAT_HISTGRM_HISTORY enable row movement;
 alter table WRI$_OPTSTAT_HISTGRM_HISTORY shrink space cascade;

Dica de gramática:

alter table TABLE_NAME encolher espaço [compacto|cascata]
As duas fases da execução do segmento encolher:

1. Reorganização de dados (compacto):

Por meio de uma série de operações de inserção e exclusão, organize os dados o mais longe possível do segmento. Nesse processo, os bloqueios RX precisam ser adicionados à tabela, ou seja, apenas as linhas que precisam ser movidas são bloqueadas.

Por envolver a alteração do rowid, é necessário habilitar a movimentação da linha e, ao mesmo tempo, desabilitar o trigger baseado no rowid, processo que tem relativamente pouco impacto no negócio.

2. Ajuste do HWM: O segundo estágio é ajustar a posição do HWM e liberar os blocos de dados livres.

Esse processo requer um bloqueio X na tabela, o que fará com que todas as instruções DML na tabela sejam bloqueadas. Pode ter um impacto relativamente grande em sistemas com empresas particularmente ocupadas.

Observação: a instrução de espaço reduzido é executada em ambas as fases.

encolher espaço compacto executa apenas o primeiro estágio. Se o negócio do sistema estiver relativamente ocupado, você pode executar a redução do espaço compacto para reorganizar os dados primeiro e, em seguida, executar a redução do espaço para reduzir o HWM para liberar blocos de dados livres quando o negócio não estiver ocupado.

exemplo

alter table TABLE_NAME shrink space compact; –- 只整理碎片 不回收空间,
alter table TABLE_NAME shrink space; –- 整理碎片并回收空间。
alter table TABLE_NAME shrink space cascade; – 整理碎片回收空间 并连同表的级联对象一起整理(比如索引)
alter table pt_table modify PARTITION P1 shrink space cascade; --分区表

Vantagens de encolher

1. Pode ser executado online

2. O parâmetro cascade pode ser usado para reduzir os índices na tabela ao mesmo tempo

3. Após a execução, o índice não será invalidado

4. Ele pode evitar a ocupação de muito espaço na tabela durante a execução do movimento alter table (se o tamanho da mesa for 10G, então o movimento alter table precisará de quase 10G de espaço para ser executado).

mover

1. A função da mesa móvel:

①: Mova uma tabela do tablespace atual para outro tablespace:

②: Para alterar os parâmetros de armazenamento dos blocos existentes da tabela, como: alterar tabela t mover armazenamento (inicial 30k próximo 50k);

③: A operação de movimentação também pode ser usada para resolver o problema de migração de linha na tabela.

2. Algumas precauções para usar o movimento:

①: O índice na tabela precisa ser reconstruído:

Conforme discutimos anteriormente, após a operação de movimentação, o rowid dos dados foi alterado. Sabemos que o índice busca as linhas de dados por meio do rowid, portanto, o índice na tabela deve ser reconstruído.

alter index index_name reconstrução online;
②: bloqueia a tabela ao mover

Quando movemos a tabela, consultamos a visão v$locked_objects para descobrir que um bloqueio exclusivo foi adicionado à tabela

③: Em relação ao uso do espaço ao se mover:

Quando usamos alter table move para reduzir o HWM da tabela, uma coisa precisa ser observada: neste momento, o tablespace atual precisa ter 1 vez o espaço livre da tabela para uso.

3. A diferença entre mover e encolher é:

1. Após a mudança, a posição da mesa no espaço da mesa mudará definitivamente, ela pode ser movida para frente ou para trás. De um modo geral, se houver espaço suficiente no espaço da mesa em frente à mesa para acomodar a mesa, ela será movido para frente, caso contrário, será movido para trás.

2. Após a redução, a posição da tabela no espaço da tabela definitivamente não será alterada, ou seja, a posição do cabeçalho do segmento da tabela não será alterada.

3. Mover moverá a marca d'água alta, mas não liberará o espaço solicitado.É uma operação abaixo da marca d'água alta (abaixo do HWM).

4. O espaço de contração também moverá a marca d'água máxima, mas também liberará o espaço aplicado, que é uma operação abaixo e acima da marca d'água máxima (abaixo e acima de HWM).

5. Ao usar o movimento, o ROWID de alguns registros será alterado, portanto, o índice se tornará inválido após o MOVE e o REBUILD é necessário.

6. Quando o espaço de redução for usado, o índice será mantido automaticamente. Se você fizer compactação quando a empresa estiver ocupada,

Você pode reduzir o espaço compacto primeiro para compactar os dados sem mover o HWM e, em seguida, reduzir o espaço para mover o HWM quando não estiver ocupado.

7. encolher pode compactar o índice separadamente, altere o espaço de redução do índice xxx para compactar o índice. Além disso, especificar Shrink space cascate ao compactar a tabela compactará o índice ao mesmo tempo.

Documentos de referência:

https://blog.csdn.net/csdn201420142015/article/details/100496907
https://blog.csdn.net/renyanjie123/article/details/114832842
https://blog.51cto.com/fengfeng688/1955137
https:/ /www.modb.pro/db/26483

Acho que você gosta

Origin blog.csdn.net/x6_9x/article/details/122921220
Recomendado
Clasificación