Runstats для чего нужно?

Светлана Комарова

Светлана Комарова

Автор статьи. Системный администратор, Oracle DBA. Информационные технологии, интернет, телеком. Подробнее.

Продолжаем обсуждать пакет Runstats.  Для чего он нужен? Действительно ли это незаменимое средство для разработчиков приложений под Oracle?

Runstats - это инструмент, который разработал Том Кайт для сравнения двух разных методов выполнения того же действия и выбора лучшего из них. Вы передаете инструменту Runstats два метода, а он делает все остальное. Runstats производит следующие три ключевых измерения.

  • Время в формате часов, минут и секунд или пройденное время. Эту информацию полезно знать, но она не является самой важной.
  • Статистика системы. Отображает рядом данные о том, сколько раз каждый из подходов делал что-либо (например, обращался к синтаксическому анализатору), и разницу между ними.
  • Сведения о защелкивании. Это основная часть отчета.

Защелка представляет собой легковесную блокировку. Блокировки - это механизмы сериализации, подавляющие параллелизм. Приложения, которые подавляют параллелизм, являются менее масштабируемыми, могут поддерживать меньшее число пользователей и требуют больший объем ресурсов. Наша цель всегда заключается в построении приложений, обладающих потенциалом масштабирования - приложений, которые могут обслуживать как одного, так и 1000 или 10 000 пользователей. Чем меньше происходит защелкивания, тем лучше. Я могу выбрать подход, который приводит к увеличению времени выполнения, но снижает количество защелок до 10% по отношению к другому подходу. Мне известно, что подход, использующий меньше защелок, будет масштабироваться значительно лучше, чем подход с более высоким числом защелок.

Утилиту Runstats лучше всего применять в изоляции, т.е. в однопользовательской базе данных. Мы будем измерять статистические показатели и активность по защелкиванию (блокированию) данных, которые присущи анализируемым подходам. Мы не хотим, чтобы во время этих измерений другие сеансы вносили свой вклад в загрузку системы или защелкивание. Для проведения тестов подобного рода удобно иметь небольшую тестовую базу данных. Например, я часто использую свой настольный ПК или ноутбук.


Важно! Я уверен, что все разработчики должны располагать полностью контролируемой испытательной базой данных, в которой они смогут проверять свои идеи, не обращаясь постоянно за помощью к администратору базы данных. Разработчики определенно должны иметь такую базу данных на своих настольных ПК, даже если лицензия в персональной версии для разработчика предполагает просто "применение ее для разработки и тестирования, но не для развертывания". В этом случае нечего терять! Кроме того, я проводил несколько неформальных опросов на конференциях и семинарах. Практически каждый администратор баз данных начинал свою деятельность как разработчик! Опыт и обучение, которое разработчики могут получить при наличии собственной базы данных - имея возможность видеть, как она в действительности работает - в долгосрочной перспективе сулит значительные преимущества.


Чтобы использовать Runstats, понадобится настроить доступ к нескольким представлениям V$, создать таблицу для хранения статистики и создать пакет Runstats. Потребуется доступ к четырем таблицам V$ (динамическим таблицам производительности): V$STATNAМE, V$MYSTAT, V$TIMER и V$LATCH. Вот представление, с которым я работаю:


create or replace view stats

as select 'STAT . . . '  ||  a.name name, b.value from v$statname а, v$mystat Ь

where a.statistic# = b.statistic#

union all

select 'LATCH.'  || name, gets

from v$latch

union all

select 'STAT . . . Elapsed Time' , hsecs from v$timer;


Важно! Действительными именами объектов, к которым должен быть предоставлен доступ, являются V_$STATNAМE, V_$MYSTAT и т.д. - имена объектов начинаются с V_$, а не V$. Имя V$ - это синоним, который указывает на представление с именем, начинающимся с v _ $. Таким образом, V$STATNAМE - синоним, указывающий на представление v_ $STATNAМE. У вас должен быть открыт доступ к этому представлению.


Вы можете иметь привилегию SELECT на V$STATNAМE, V$MYSTAT и V$LATCH, выданную непосредственно вам, так что у вас будет возможность создать представление самостоятельно. Кроме того, кто-то другой, располагающий привилегией SELECT на этих объектах, может создать представление и затем выдать вам привилегию SELECT на нем. Осталось создать небольшую таблицу для сбора статистики:


create global temporary table run stats

( runid varchar2 ( 15) , -

name varchar2 (80) , value int )

on commit preserve rows ;


 

Наконец, необходимо создать сам пакет для Runstats. Он содержит три простых АРI-вызова:

  • RS_START (запуск Runstats) - процедура, которая должна вызываться в начале теста Runstats;
  • RS_MIDDLE -      процедура, которая должна вызываться в середине теста;
  • RS_STOP - процедура, которая завершает выполнение и выводит отчет.

Спецификация этого пакета выглядит следующим образом:


EODA@ORA12CR1> create or replace package runstats_pkg

2 as

3 procedure rs_start; 4 procedure rs_rniddle;

5 procedure rs_stop ( p_difference threshold in number default 0 ) ;

6     end;

7    /

Package created. Пакет создан.


Параметр р_difference_threshold служит для управления объемом выводимых в конце данных. Пакет Runstats собирает статистические сведения и информацию о защелках для каждого запуска, после чего выводит отчет о количестве используемых каждым тестом (каждым подходом) ресурсов и разнице между ними. Этот входной параметр можно применять для вывода только тех статистических сведений и информации о защелках, которые отличаются больше, чем на это число. По умолчанию значение p_difference_threshold равно нулю, поэтому отображаются все результаты.

 

Вас заинтересует / Intresting for you:

Разработка успешных приложений...
Разработка успешных приложений... 1285 просмотров Светлана Комарова Tue, 21 Nov 2017, 13:28:39
Настройка среды SQL*Plus для р...
Настройка среды SQL*Plus для р... 3531 просмотров Ирина Светлова Tue, 21 Nov 2017, 13:28:01
Метод черного ящика - разработ...
Метод черного ящика - разработ... 1838 просмотров Administrator SU Tue, 21 Nov 2017, 13:28:39
Индексы в базе данных для прог...
Индексы в базе данных для прог... 1559 просмотров Antoniy Tue, 21 Nov 2017, 13:28:39
Войдите чтобы комментировать