Привет! представляю вашему вниманию перевод статьи «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 Edidtion. Ну, по крайней мере, я знаю, что я не имею права использовать его.
Когда я снова посмотрел в директорию <ORACLE_HOME>/rdbms/admin, я обнаружил, что STATSPACK все еще там, что является оригинальным инструментом сбора данных о производительности для более старых баз данных и очень похож на AWR в функциях. Лучше всего, что мы можем использовать STATSPACK в качестве замены AWR в стандартных изданиях без ограничений.
Установка 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, а временное табличное пространство dafault будет 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 и одновременно сделает снимок.
Автор: разработчик 80-го уровня