aparência
O espaço da tabela SYSAUX vem crescendo e a taxa de crescimento é de 10 G em um mês, e o espaço da tabela precisa ser mantido regularmente
razão
Causado por bug oracle (Doc ID 1055547.1)
O MMON realiza a limpeza do histórico de estatísticas do otimizador automaticamente. Porém tem um limite interno de 5 minutos para realizar este trabalho. Se a operação demorar mais de 5 minutos, ela será abortada e as estatísticas não serão removidas.
Nenhum rastreamento ou mensagem de alerta é relatado.
Método de processamento - sem patch
desativar estatísticas
Como é necessário inserir dados nas tabelas relacionadas a seguir ao coletar informações estatísticas, os dados estatísticos não podem ser coletados durante a limpeza.
wri$_optstat_tab_history
wri$_optstat_ind_history
wri$_optstat_histhead_history
wri$_optstat_histgrm_history
Faça login no ebs para cancelar os dois (um GL, um ALL) modos de dados estatísticos de solicitação de planejamento (parâmetros de backup de captura de tela antes de cancelar).
Excluir dados históricos
Todos os seguintes sql são executados como sys como dba
Primeiro, calcule quantos dias atrás é a data mais antiga dos dados existentes.
SELECT TRUNC(SYSDATE) - TO_DATE(to_char(MIN(savtime), 'YYYY-MM-DD'), 'yyyy-mm-dd')
FROM sys.WRI$_OPTSTAT_HISTHEAD_HISTORY;
Supondo que sejam 190 dias, faça login no sqlplus via área de trabalho remota (o seguinte sql pode levar vários dias e precisa ser executado em segundo plano ou na área de trabalho remota)
set serveroutput on
BEGIN
DBMS_OUTPUT.ENABLE(buffer_size => null);
for i in reverse 10..190
loop
dbms_output.put_line(to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') || '-Begin delete Day ' || i );
dbms_stats.purge_stats(sysdate-i);
COMMIT;
dbms_output.put_line(to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') || '-Complete delete Day ' || i );
end loop;
end;
/
O sql acima pode ser executado por vários dias. Após a conclusão da execução, shink é usado para encolher a tabela.
executar tabela encolher
--先备份索引数据
select dbms_metadata.get_ddl('INDEX','I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST','SYS') from dual;
select dbms_metadata.get_ddl('INDEX','I_WRI$_OPTSTAT_HH_ST','SYS') from dual;
-- Drop indexes
drop index I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST;
drop index I_WRI$_OPTSTAT_HH_ST;
--开启行迁移
alter table WRI$_OPTSTAT_HISTHEAD_HISTORY enable row movement;
--进行收缩(此处没有用move是为了节省空间)
alter table WRI$_OPTSTAT_HISTHEAD_HISTORY shrink space cascade;
--收缩完毕后进行索引重建
CREATE UNIQUE INDEX "SYS"."I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST" ON "SYS"."WRI$_OPTSTAT_HISTHEAD_HISTORY" ("OBJ#", "INTCOL#", SYS_EXTRACT_UTC("SAVTIME"), "COLNAME")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSAUX" ;
CREATE INDEX "SYS"."I_WRI$_OPTSTAT_HH_ST" ON "SYS"."WRI$_OPTSTAT_HISTHEAD_HISTORY" (SYS_EXTRACT_UTC("SAVTIME"))
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSAUX" ;
coletar estatísticas
EXEC dbms_stats.gather_table_stats(ownname => ‘SYS’,tabname => ‘WRI$_OPTSTAT_HISTHEAD_HISTORY’,cascade => TRUE);
Ver o efeito
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;
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;
Retomar a coleta de informações do modo de estatísticas
Envie imediatamente as estatísticas do modo ALL e, em seguida, defina uma solicitação de plano, modo ALL, coleta de dados todas as sextas-feiras às 22h, os parâmetros referem-se à captura de tela de backup.
Como o tamanho dos dados semanais do modo de razão geral não muda muito, para economizar energia, não há necessidade de definir uma solicitação de plano para ser executada todas as noites.
As bibliotecas não EBS precisam usar a API correspondente para habilitar e desabilitar a coleta de estatísticas.