Привет, Хабр! представляю вашему вниманию перевод статьи «How to use statspack instead of awr in oracle standard edition».

Как использовать STATSPACK вместо AWR в Oracle Standard Edition.

Проблема с отчетами


Я собирал данные о производительности в незнакомой базе данных. После того, как я запустил отчет AWR, выполнив команду

@?/Rdbms/admin/awrrpt.sql 


Получил ошибку:
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 ... 

Есть ли вероятность, что диагностический пакет отключен?

Давайте посмотрим параметр CONTROL_MANAGEMENT_PACK_ACCESS.

SQL> show parameter control_management_pack_access

NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
control_management_pack_access       string
NONE

Я немного с осторожностью оценил значение NONE. Поскольку Oracle Enterprise Edition включает лицензию диагностического пакета, а Standart Edition — нет, я не имел права использовать ее. Посмотрим информацию о версии.

.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

Как мы видим, «Enterprise Edition» не отобразилась в консоли. Это определенно Standart Edition. Ну, по крайней мере, я знаю, что я не имею права использовать его.

Когда я снова посмотрел в директорию <ORACLE_HOME>/rdbms/admin, я обнаружил, что STATSPACK все еще там, что является оригинальным инструментом сбора данных о производительности для более старых баз данных и очень похож на AWR в функциях. Лучше всего, что мы можем использовать STATSPACK в качестве замены AWR в Standart Edition без ограничений.

Установка STATSPACK


Для создания STATSPACK с запланированным заданием необходимо выполнить по крайней мере два шага.

1) Выполнить скрипт spcreate.sql
Я предлагаю вам перейти в директорию <ORACLE_HOME>/rdbms/admin как ваш текущий рабочий каталог, потому что все журналы во время выполнения останутся в этом каталоге.

Выполним скрипт:

SQL> @spcreate.sql;

Давайте посмотрим, что у нас есть в этом скрипте:

@@spcusr
connect perfstat/&&perfstat_password
@@spctab
@@spcpkg

Для запуска требуется 3 основных сценария SQL.
spcusr.sql

  • Он создаст пользователя под названием PERFSTAT, табличное пространство по умолчанию будет SYSAUX, а временное табличное пространство будет TEMP.
  • Оба табличных пространства могут быть настроены, но перед запуском этого сценария вы должны убедиться, что табличные пространства существуют в вашей базе данных.
  • Вам нужно запомнить пароль, если вы захотите выполнить некоторые подпрограммы позднее.spctab.sql

В таблице spctab.sql будет создано 71 таблица 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

Он создаст необходимые хранимые процедуры STATSPACK для PERFSTAT.

2. Выполнить скрипт spauto.sql
Этот скрипт отправит задание с заданным интервалом (1 час).

SQL> @spauto.sql;

В котором он представляет такую работу:

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  /

А затем покажите следующее время выполнения.

SQL> select job, next_date, next_sec
  2    from user_jobs
  3   where job = :jobno;

Больше соображений


Для более «глубокой» статистики необходимо изменить уровень моментального снимка на 7 вместо уровня по умолчанию 5.

SQL> exec statspack.snap(i_snap_level => 7, i_modify_parameter => 'true');

Эта команда изменит уровень привязки на 7 и одновременно сделает снимок.

Комментарии (0)