Сбор и воспроизведение нагрузки базы данных Oracle 11g Database Replay - Сбор нагрузки

ОГЛАВЛЕНИЕ

Сбор нагрузки

Первое, что нужно сделать, это собрать нагрузку на базе данных. Все операции могут выполняться из командной строки или же через Enterprise Manager Database Control. Мы будем пользоваться последним.

  1. Собранная нагрузка хранится в файлах в заданной директории в ОС. Данная директория должна быть пуста. Итак, первое, что нужно сделать, - это создать директорию, если у вас ещё нет такой. К примеру, создадим директорию  /home/oracle/dbcapture
 $ cd /home/oracle
$ mkdir dbcapture
  1. Создадим соответствующий объект в базе данных:
SQL> create directory dbcapture as '/home/oracle/dbcapture';
Directory created.
  1. Теперь мы готовы начать сбор нагрузки. Для примера создадим простой тест. Мы сгенерируем множество операций INSERT в таблицу TRANS.
create table trans (
        trans_id        number,
        cust_name       varchar2(20),
        trans_dt        date,
        trans_amt       number(8,2),
        store_id        number(2)
)
/

Ниже приведён простой PL/SQL-код, который делает вставки. Он генерирует и выполняет 1000 операций INSERT.

declare
  l_stmt varchar2(2000);
begin
  for ctr in 1..1000 loop
     l_stmt := 'insert into trans values ('//
        trans_id_seq.nextval//','//
        ''''//dbms_random.string('U',20)//''','//
        'sysdate - '//
        round(dbms_random.value(1,365))//','//
        round(dbms_random.value(1,99999999),2)//','//
        round(dbms_random.value(1,99))//')';
     dbms_output.put_line(l_stmt);
     execute immediate l_stmt;
     commit;
  end loop;
end; 

Просто создайте файл с вышеописанным содержимым. Не запускаете его пока назовём его, к примеру,  add_trans.sql.
(Все вышеописанные операции за исключением создания директории требуются  лишь для данного урока.)

  1. В реальном мире нагрузка будет воспроизводиться, как правил, на отдельной базе данных. Но в нашем примере мы просто "отмотаем" ту же самую базу данных на момент в прошлом и воспроизведём нагрузку снова. Вы можете пометить этот момент точкой восстановления GOLD.
     SQL> create restore point gold;

Итак, мы готовы к сбору нагрузки. Перейдем на основную страницу Database Replay в Oracle Enterprise Manager Database Control. Ссылка на неё находится во вкладке Software and Support.


  1. Выберите на Database Replay (в разделе Real Application Testing).

  1. В левой части экрана представлен список возможных действий. Выберем первый пункт (Task 1: Capture Workload)
  2. На следующей странице нужно удостовериться в трёх важных условиях и подтвердить, что система удовлетворяет им:
    • Исходная база данных может быть восстановлена на тестовой системе на момент времени (SCN), когда был начат процесс сбора нагрузки.
    • На диске достаточно места для хранения файлов сбора нагрузки
    • Все готово к перезапуску базы данных перед началом сбора нагрузки, если выбран такой вариант.
  3. Отметим все пункты для подтверждения.
  4. Нажмем Next.
  5. Следующая страница имеет две части. В верхней предоставляется возможность  перезапуска базы данных перед началом сбора нагрузки.

Когда вы запускаете процесс сбора нагрузки, некоторые транзакции могут ещё выполняться, поэтому часть из них попадёт в результат, а часть нет. Перезапуск базы позволит избежать такой ситуации. Более того, перезапуск базы даст возможность сделать корректную резервную копию, которую можно будет восстановить на тестовой системе, чтобы SCN исходной и тестовой базы совпадали при воспроизведении нагрузки.

Поэтому по умолчанию стоит выбор перезагрузки. Oracle рекомендует перезапуск базы переда началом сбора нагрузки. Но это не обязатедьно. Если вы не хотите этого делать, то просто выберите другой пункт.

  1. Нижняя же часть страницы представлена на картинке ниже.

Здесь можно задать фильтры, по которым процесс сбора нагрузки будет записывать активность в базе данных. Два фильтра идут по умолчанию, чтобы исключить активность Oracle Management Server и от Oracle Management Agent.

Вы также можете создать дополнительные фильтры. К примеру, чтобы исключить из результата все программы perl, нажмите Add Another Row и введите "perl" и "%perl%" в полях "Filter Name" и "Value" соответственно. Таким же образом скорректируйте небольшую ошибку в параметре по умолчанию - значение в фильтре Oracle Management Agent filter должно быть "%emagent%", а не "emagent%".

Или, к примеру, вы хотите исключить все действия пользователя SYS. В таком случае нужно выбрать USER в выпадающем списке "Session Attribute" и написать "SYS" в поле "Value".

  1. Нажмем Next для перехода на следующую страницу:

  1. На данной странице из выпадающего списка следует выбрать директорию, где будут храниться файлы с результатами сбора нагрузки. В данном случае используется директория с именем DBCAPTURE. Если данная директория не была создана ранее, то ее можно создать на этом шаге, кликнув по Create Directory Object. После этого нажмем Next.
  2. На следующей странице даны настройки Job Details такие, когда задание должно выполниться, пароли и так далее. Выберим пункт Immediate для немедленного выполнения.
  3. Заполним и остальные поля на этой странице такие, как имя пользователя ОС, пароль пользователя SYS и так далее, и нажмем Next.
  4. Следующая страница, озаглавленная "Step 5 of 5", обобщает всю введенную информацию: имя задания, фильтры и т.д. Если всё выглядит так, как вы хотели, то нажмите Submit. В ином случае можно вернуться назад для исправления.
  5. Как только нажата клавиша Submit, начинается процесс сбора нагрузки. Вы увидите страницу с подтверждением этого.

Обатим внимание, что поле Status показывает "In Progress".

  1. Теперь, когда запущен процесс сбора нагрузки, запустим из SQL*Plus симулятор нагрузки. Конечно, в реальной ситуации никаких симуляторов не потребуется. Просто запускается  процес,с и проходит некоторое время в ожидании результатов.
SQL> connect arup/arup
SQL> @ins_trans

Данный скрипт произведёт 1,000 операций вставок строки в таблицу TRANS.

  1. Как только процесс сбора нагрузки будет завершён, нажимаем Stop Capture, как показано выше.
  2. Oracle автоматически делает снимок Automated Workload Repository (AWR) перед и по завершении процесса сбора нагрузки. На следующей странице будет задан вопрос, надо ли экспортировать данные AWR. Это важно, если вы воспроизводите нагрузку на другой системе и хотели бы экспортировать данные AWR с исходной базы на тестовую. Нажем Yes.

  1. Создается задание планировщика для экспорта данных AWR. Нажмите на имя задания и обновляйте страницу до тех пор, пока задание не исчезнет из Running.

Вот вы и собрали нагрузку в файлы в директории /home/oracle/dbcapture!