Olá Habr! Apresento a você a tradução do artigo
"Como usar o statspack em vez do awr na Oracle Standard Edition" .
Como usar o STATSPACK em vez do AWR no Oracle Standard Edition.
Informar problema
Eu estava coletando dados de desempenho em um banco de dados desconhecido.
Depois de executar o relatório AWR, executando o comando
@?/Rdbms/admin/awrrpt.sql
Ocorreu um erro:
WARNING (-20023) ORA-20023: Missing start and end values for time model stat: parse time elapsed WARNING (-20023) ORA-20023: Missing start and end values for time model stat: DB CPU WARNING (-20016) ORA-20016: Missing value for SGASTAT: free memory ...
Existe uma chance de o pacote de diagnóstico estar desativado?
Vamos ver o parâmetro CONTROL_MANAGEMENT_PACK_ACCESS.
SQL> show parameter control_management_pack_access NAME TYPE ------------------------------------ ---------------------- VALUE ------------------------------ control_management_pack_access string NONE
Fiquei um pouco cauteloso com o valor de NENHUM. Como o Oracle Enterprise Edition inclui uma licença de pacote de diagnóstico e a Standart Edition não, eu não tinha o direito de usá-la. Vamos ver as informações da versão.
.SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Release 11.1.0.6.0 - 64bit Production PL/SQL Release 11.1.0.6.0 - Production CORE 11.1.0.6.0 Production TNS for 64-bit Windows: Version 11.1.0.6.0 - Production NLSRTL Version 11.1.0.6.0 - Production
Como podemos ver, o “Enterprise Edition” não apareceu no console. Esta é definitivamente a edição padrão. Bem, pelo menos eu sei que não tenho o direito de usá-lo.
Quando olhei novamente para o diretório <ORACLE_HOME> / rdbms / admin, descobri que STATSPACK ainda está lá, que é a ferramenta original de coleta de dados de desempenho para bancos de dados mais antigos e é muito semelhante ao AWR em funções. O melhor de tudo é que podemos usar o STATSPACK como um substituto para o AWR na Standart Edition sem restrições.
Instalar STATSPACK
Pelo menos duas etapas devem ser executadas para criar um STATSPACK com uma tarefa agendada.
1) Execute o script spcreate.sql
Sugiro que você vá para o diretório <ORACLE_HOME> / rdbms / admin como seu diretório de trabalho atual, porque todos os logs permanecerão nesse diretório em tempo de execução.
Execute o script:
SQL> @spcreate.sql;
Vamos ver o que temos neste script:
@@spcusr connect perfstat/&&perfstat_password @@spctab @@spcpkg
Requer 3 scripts SQL básicos para executar.
spcusr.sql
- Ele criará um usuário chamado PERFSTAT, o espaço de tabela padrão será SYSAUX e o espaço de tabela temporário será TEMP.
- Os dois espaços de tabela podem ser configurados, mas antes de executar este script, você deve garantir que os espaços de tabela existam no seu banco de dados.
- Você precisa lembrar a senha se desejar executar algumas rotinas posteriormente.
Na tabela spctab.sql, serão criadas 71 tabelas STATSPACK.
STATS$DATABASE_INSTANCE STATS$LEVEL_DESCRIPTION STATS$SNAPSHOT STATS$DB_CACHE_ADVICE STATS$FILESTATXS STATS$TEMPSTATXS STATS$LATCH STATS$LATCH_CHILDREN STATS$LATCH_PARENT STATS$LATCH_MISSES_SUMMARY STATS$LIBRARYCACHE STATS$BUFFER_POOL_STATISTICS STATS$ROLLSTAT STATS$ROWCACHE_SUMMARY STATS$SGA STATS$SGASTAT STATS$SYSSTAT STATS$SESSTAT STATS$SYSTEM_EVENT STATS$SESSION_EVENT STATS$WAITSTAT STATS$ENQUEUE_STATISTICS STATS$SQL_SUMMARY STATS$SQLTEXT STATS$SQL_STATISTICS STATS$RESOURCE_LIMIT STATS$DLM_MISC STATS$CR_BLOCK_SERVER STATS$CURRENT_BLOCK_SERVER STATS$INSTANCE_CACHE_TRANSFER STATS$UNDOSTAT STATS$SQL_PLAN_USAGE STATS$SQL_PLAN STATS$SEG_STAT STATS$SEG_STAT_OBJ STATS$PGASTAT STATS$PARAMETER STATS$INSTANCE_RECOVERY STATS$STATSPACK_PARAMETER STATS$SHARED_POOL_ADVICE STATS$SQL_WORKAREA_HISTOGRAM STATS$PGA_TARGET_ADVICE STATS$JAVA_POOL_ADVICE STATS$THREAD STATS$FILE_HISTOGRAM STATS$EVENT_HISTOGRAM STATS$TIME_MODEL_STATNAME STATS$SYS_TIME_MODEL STATS$SESS_TIME_MODEL STATS$STREAMS_CAPTURE STATS$STREAMS_APPLY_SUM STATS$PROPAGATION_SENDER STATS$PROPAGATION_RECEIVER STATS$BUFFERED_QUEUES STATS$BUFFERED_SUBSCRIBERS STATS$RULE_SET STATS$OSSTATNAME STATS$OSSTAT STATS$PROCESS_ROLLUP STATS$PROCESS_MEMORY_ROLLUP STATS$SGA_TARGET_ADVICE STATS$STREAMS_POOL_ADVICE STATS$MUTEX_SLEEP STATS$DYNAMIC_REMASTER_STATS STATS$IOSTAT_FUNCTION_NAME STATS$IOSTAT_FUNCTION STATS$MEMORY_TARGET_ADVICE STATS$MEMORY_DYNAMIC_COMPS STATS$MEMORY_RESIZE_OPS STATS$INTERCONNECT_PINGS STATS$IDLE_EVENT
spcpkg.sql
Ele criará os procedimentos armazenados STATSPACK necessários para PERFSTAT.
2. Execute o script spauto.sql
Este script enviará a tarefa no intervalo especificado (1 hora).
SQL> @spauto.sql;
Em que ele apresenta este trabalho:
SQL> begin 2 select instance_number into :instno from v$instance; 3 dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno); 4 commit; 5 end; 6 /
E então mostre o próximo tempo de execução.
SQL> select job, next_date, next_sec 2 from user_jobs 3 where job = :jobno;
Mais considerações
Para estatísticas mais detalhadas, você precisa alterar o nível do instantâneo para 7 em vez do nível padrão 5.
SQL> exec statspack.snap(i_snap_level => 7, i_modify_parameter => 'true');
Este comando altera o nível de snap para 7 e tira uma foto ao mesmo tempo.