oracle ash что это
Русские Блоги
Детальный анализ реального боя ASH, анализ оптимизации диагностики производительности ORACLE 11G
1、ASH (Active SessionHistory)
Как правило, проблемы с производительностью базы данных можно диагностировать онлайн в режиме реального времени, особенно когда нагрузка высока, а ЦП загружен на 100% после 100%. В это время использование золы для создания отчетов журнала в реальном времени может в значительной степени точно определить местонахождение проблемы.
2. Основные элементы ASH
После выполнения команды SQL> @? / Rdbms / admin / ashrpt.sql следующие параметры необходимо будет заполнить вручную:
(1) Тип отчета журнала
Enter value for report_type: text
— Выберите тип создаваемого отчета ASH, будь то текст или HTML.
(2) Время начала отчета журнала
Enter value for begin_time: 08/31/1620:00:00
— Введите время начала ASH. Формат времени объяснен в примере выше. Например, здесь я начинаю в 20:00:00 31 августа 2016 г.
(3) Время окончания отчета журнала
Enter value for duration:7200
(4) Имя файла отчета
Enter value for report_name: /home/oracle/ash_20160831_3.html
— Введите имя отчета ASH, вы можете указать сгенерированный каталог, по умолчанию это каталог, в который в настоящее время выполнен вход в sqlplus. Лучше всего добавить расширение здесь. Если расширение не добавлено, расширение станет lst. Это не влияет на данные, но влияет на эффективность чтения.
DB Id DB Name Inst Num Instance
3391761643 POWERDES 1 powerdes
Specify the Report Type
Enter ‘html’ for an HTML report, or ‘text’ for plain text
Enter value for report_type: html
Type Specified: html
Instances in this Workload Repository schema
DB Id Inst Num DB Name Instance Host
* 3391761643 1 POWERDES powerdes pldb1
* 3391761643 1 POWERDES powerdes localhost.lo
Defaults to current database
Using database id: 3391761643
Enter instance numbers. Enter ‘ALL’ for all instances in a
RAC cluster or explicitly specify list of instances (e.g., 1,2,3).
Defaults to current instance.
Using instance number(s): 1
ASH Samples in this Workload Repository schema
Oldest ASH sample available: 23-Aug-16 08:00:17 [ 12265 mins in the past]
Latest ASH sample available: 31-Aug-16 20:25:19 [ 0 mins in the past]
Specify the timeframe to generate the ASH report
Enter begin time for report:
— Valid input formats:
— To specify absolute begin time:
— Examples: 02/23/03 14:30:15
— To specify relative begin time: (start with ‘-‘ sign)
Enter value for begin_time: 08/31/16 20:00:00
Report begin time specified: 08/31/16 20:00:00
Enter duration in minutes starting from begin time:
Press Enter to analyze till current time
Enter value for duration: 7200
Using 31-Aug-16 20:00:00 as report begin time
Using 31-Aug-16 20:26:30 as report end time
Specify Slot Width (using ashrpti.sql) for ‘Activity Over Time’ section
……… # Здесь слишком много информации, поэтому я не смогу опубликовать ее.
# Введите здесь имя созданного файла отчета и нажмите Enter.
Enter value for report_name: ash_20160831_3.html
Active Session History (ASH)
Introduction
For a long time DBAs have been encouraged to use variations on the YAPP method of performance tuning, which focuses on wait event monitoring, rather than hit ratios. Tools like Statspack, AWR, ADDM and SQL Trace are all very useful for gathering wait event information during tuning, but they tend to focus on looking back at what has happened, rather than what is currently happening. The [G]V$ dynamic performance views provide masses of real-time information, but it can be difficult for beginners and experienced people alike to make good use of this information.
Oracle 10g introduced the Active Session History (ASH) as part of the Diagnostics and Tuning Pack. It samples information from the [G]V$ views allowing you to see current and historical information about active sessions on the database.
Being part of the Diagnostics and Tuning Pack means ASH is only available as a paid option on top of Oracle Database Enterprise Edition.
V$ACTIVE_SESSION_HISTORY
Samples of wait event information are taken once per second and made available using the V$ACTIVE_SESSION_HISTORY view. An active session is one that is waiting on CPU or any event that does not belong to the «Idle» wait class at the time of the sample. The sample information is written to a circular buffer in the SGA, so the greater the database activity, the less time the information will remain available for.
The V$ACTIVE_SESSION_HISTORY view is essentially a fact table, which can be linked to a number of dimensions to provide statistics specific to a variety of things including SQL statements, execution plans, objects, wait events, sessions, modules, actions, client identifiers, services and consumer groups etc. This makes it an incredibly flexible way of identifying what active sessions are doing, or have done. For example, if I wanted to see the main activity on the database for the last 5 minutes, I could use the following query.
Notice how the count of the samples is used to determine the time waited, not the WAIT_TIME or TIME_WAITED columns. Why is this done? Remember, this is sample data, so wait times are accumulating with each sample. Merely summing them will give a falsely high value. To explain this, imagine simplified case where a single session is waiting on «db file sequential read» for 5 seconds. That means we would have 5 samples, that may look like this.
We know the total wait time is 5 seconds. If we count the number of samples, we get 5, which we equate to 5 seconds. If we sum the time for all 5 samples get 15 seconds.
The time columns in the ASH data are a little more complicated than they first appear, so check the documentation when using them. Incorrect usage of these columns is probably the most common mistake people make when using ASH views.
The fact ASH uses samples can of course mean certain bits of information slip through the net, but this is not really a problem. The chances are your main concerns will be those sessions or statements that are taking lots of time. The longer things take to run, the more samples they are likely to be picked up in. It is unlikely that anything of major concern will completely fail to register in the ASH views, but that doesn’t mean you can ignore its limitations.
DBA_HIST_ACTIVE_SESS_HISTORY
To allow for historical access to the ASH data, one in ten samples are persisted to disk and made available using the DBA_HIST_ACTIVE_SESS_HISTORY view. So this is a sample of a sample. Using this view is similar to using the V$ACTIVE_SESSION_HISTORY view, but remember the sample time is now 10 seconds, so use (count*10) to measure time, rather than just the count.
Enterprise Manager Performance Pages
Accessing the ASH information directly can be very useful, but there are a number of more efficient ways to get to some of this information. The performance pages of Enterprise Manager (Grid Control and Cloud Control) are fantastic. They are based on the ASH information, giving you easy access to real-time and historical performance information.
The following picture is an example of the Enterprise Manager performance home page.
An example of the Top activity page is shown below.
ASH Report
ASH reports can be displayed using Enterprise Manager, or generated from SQL*Plus. To manually generate them using SQL*Plus, run the following script, while logged in as a privileged user.
The script prompts you for the following details:
The script produces either text or HTML output as requested. Examples of these are shown below.
Depending on the options selected, the ASH report scripts call one of several table functions from the DBMS_WORKLOAD_REPOSITORY package.
SQL Developer and ASH Reports
If you are using SQL Developer 4 onward, you can view ASH reports directly from SQL Developer. If it is not already showing, open the DBA pane «View > DBA», expand the connection of interest, then expand the «Performance» node. The ASH reports are available from the «ASH Reports Viewer» node.
ASH Viewer
The ASH Viewer tool gives a graphical view of active session history data within the Oracle instance. Interestingly, it is supports Oracle 8i onward. In releases prior to Oracle 10g, or if you don’t have a Diagnostic and Tuning Pack license, you can connect using the «Standard» connection and the tool will mimic the functionality of ASH. If you have the necessary licenses, you can make «Enterprise» connections, which use ASH to provide the data.
ASH Viewer
Предыстория (2008 г.)
По работе часто приходилось разбираться с производительностью серверов БД Oracle. После выхода Oracle 10g задача по мониторингу и диагностике проблем с производительностью значительно упростилась – с помощью истории активных сессий (Active Session History, ASH) стало возможно узнать, что происходило с БД в прошлом, что творится на сервере в данный момент, и даже прогнозировать, что будет происходить с нагрузкой в будущем.
В общем, после рассмотрения всех доступных на тот момент вариантов, было принято волевое решение собирать свой «велосипед» из подручных материалов.
Общая информация об ASH Viewer:
ASH Viewer предоставляет графический интерфейс для просмотра данных по активным сессиям. Программа периодически опрашивает сервер БД Oracle для получения списка активных сессий, сохраняет информацию в локальной базе данных, после чего данные визуализируются. Для версий до версии 10g база данных опрашивается один раз в секунду, для Oracle 10g и выше запрос информации из v$active_session_history и обновление графика происходят каждые 30 секунд.
Настройка и подключение:
Скачать дистрибутив, распаковать в отдельную директорию, добавить ojdbc6.jar в lib директорию. Запустить ASHV.jar или run.com (run.sh), поправив пути к установленной Java на локальном компьютере. Подключение выполнять с помощью пользователя с привилегиями на просмотр таблиц и правами на исполнение pl/sql пакетов, необходимых для работы ASH Viewer-a — тут.
Для версии 10g и выше есть возможность включения эмуляции ASH. Данный режим подходит для баз, у которых не подключена платная опция Oracle Diagnostic Pack, или для Oracle в редакции Standard Edition. Для 9i, 8i версий выбираем Standard.
Интерфейс Top Activity:
Интерфейс идентичен странице Top Activity Oracle Enterprise Manager. Выделяем произвольный диапазон на графике и получаем данные по top активных сессий и SQL/PL/SQL-операторов. Есть возможность получить детальную информацию по запросу – текст запроса, планы выполнения:
– Напрямую из v$sql_plan (по различным plan_hash_value). Сделано для совместимости с предыдущими версиями СУБД Oracle;
– DBMS_XPLAN.DISPLAY_CURSOR. Из курсорного кэша. Планы выполнения по определенному sql_id;
– DBMS_XPLAN.DISPLAY_AWR. Планы исполнения из репозитория рабочей нагрузки, также по sql_id.
В настройках можно выставить автоматический режим, при котором программа самостоятельно обновляет top sql-сессий и процессов по заданному окну (по умолчанию – 5 минут последней активности сервера БД), количество SQL, PL/SQL операторов, по которым выбирается детальная информация из БД (запрос из v$sql) и возможность изменения масштаба представления графика Top Activity относительно количества процессоров (параметр сервера БД cpu_count). По выделенному диапазону можно получить ASH-отчет (аналогично тому выводу, который получаем через скрипт) через вызов API сервера БД – DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT
Интерфейс Detail:
Детализация по CPU Used и каждой группе событий ожидания. Работает аналогично интерфейсу Top Activity Oracle Enterprise Manager, только отсутствует автоматический режим. Также можно настраивать количество операторов, по которым выбирается детальная информация из v$sql, сохранение планов исполнения запросов в локальной базе и возможность изменения масштаба представления графика относительно количества процессоров в системе.
Интерфейс History:
На этой странице можно просматривать историю активных сессий, используя собранные данные из истории активных сессий Oracle. Навигация производится через интерфейс «Календарь». Также в интерфейсе «Календарь» можно выбрать диапазон дней и удалить его из локальный базы, чтобы освободить пространство на диске (например, в случае длительного сбора истории активных сессий). Работает offline режим, при котором можно запускать ASH Viewer только для просмотра архивных данных. Для получения более полной информации в архивном режиме рекомендуется собирать информацию в online в автоматическом режиме, иначе информация по sql-запросам будет доступна только в виде SQL ID/ HASH Value.
Запись действий на экране в gif файл — ScreenToGif
Утилита для нагрузочного тестирования баз данных — Hummerora.
ASH Viewer: перезагрузка
Что делать, если надо работать с данными, которые по объему еще не Big data, но уже больше того, что умещается в памяти компьютера и для которых достаточно возможностей Excel? Для любителей велосипедостроения ответ очевиден – нужно писать что-то свое (да, мы не ищем легких путей).
Но как быть, если код, написанный тобой в прошлом, ужасен и не дает тебе возможности развивать проект? Отставить в сторонку старые наработки, дать дорогу новому, вечному и светлому (да-да, и тут тоже без вариантов).
Цитата из кф Матрица: “Достаточно одной таблетки, Нео”. Режиссер: братья и сестры Вачовски. 1999. США
Уже больше 10 лет назад я написал код для ASH Viewer (более подробно о моем пути здесь ), выложил сначала на sourceforge.net, а потом и на github чтобы люди подключались и могли добавлять функционал, править ошибки. Была сделана сборка проекта с помощью Gradle, решили вопросы с отображением графиков: практически полный список улучшений по ссылке.
Однако я понимал, что написанный десять лет назад код, мягко говоря, неидеален. Внешне все выглядело неплохо, функциональность была развита, люди активно пользовались и благодарили. Но внутри программа содержал все ошибки первого опыта кодирования и, конечно, это очень сильно тормозило развитие проекта.
С момента первого релиза ASH Viewer активно работал в этом направлении. Было сделано 3 достаточно крупных проекта на базе JfreeChart для анализа данных. Кроме этих проектов, пробовал разные подходы, парадигмы и библиотеки. В итоге остановился на том, что писать надо все на чистой Java, без использования библиотек специально предназначенных для создания графического интерфейса с нуля. Но все же применять сторонние библиотеки для решения каких-то узкоспециализированных задач вполне допустимо — это позволит сохранить необходимый уровень гибкости и не потребует значительных затрат времени на исправление багов и разработку требуемой функциональности своими руками.
Как все начиналось
Меня всегда волновало, а есть ли в свободном доступе пример, который бы давал основы правильного написания приложений средней сложности на Java Swing? Конечно, меня отсылали к самой библиотеке или к каким-то простым примерам из учебников. И в чем-то они были правы.
Но я упорно искал код приложения, который можно было бы использовать в качестве примера «как надо делать правильно» на Java Swing. Причем хотелось иметь перед глазами рабочую систему, чтобы ее можно было «пощупать».
Начал изучать исходные коды приложений на Java Swing (всех их не перечесть). Где-то это были простые ToDo, где-то слишком сложные (для меня на тот момент), в каких-то подводило качество, а иногда было и то, и другое. Читал статьи на Хабре, писал код. Но все же чего-то не хватало. Возможно, я как раз тогда набирал критический для решения этой задачи объем знаний.
В один из дней обнаружил Angry IP Scanner уважаемого Антона Кекса antonkeks, посмотрел ее и сразу понял — вот оно! Java Swing, простой функционал, чистый код, модульность – приятно читать! В общем, используемые в ней подходы я взял за основу при написании одного из своих предыдущих проектов, а затем и при переписывании ASH Viewer.
ПО и библиотеки, которые помогли улучшить качество кода и упростили работу
IDEA: уже лет пять использую эту IDE для программирования в Java. Подтверждаю мнение большинства — это действительно полезная программа и очень удобный инструмент для написания кода. Когда я пересел на нее с Эклипса www.eclipse.org/ide (а первая версия была написана на этой IDE), то после непродолжительного обучения понял, IDEA ведет тебя и сообщает, когда ты пытаешься перейти на темную сторону :). Подсветка повторов в коде держит тебя в тонусе и не дает заниматься тупой копипастой. Аве JetBrains!
Java 8: лямбда-выражения, которые дают возможность писать более короткий код, новое Time API, позволившее отменить использование сторонней библиотеки Joda Time.
Dagger 2: Dependency injection framework я раньше вообще не применял. Но как-то подсмотрел, как используется эта библиотека у Антона antonkeks, и стал делать по шаблону. Делить программу на модули, где это возможно, использовать внедрение зависимостей. Где это было невозможно, использовал создание объектов оболочек заранее, а потом проводил установку необходимых атрибутов или просто не использовал DI.
Система сборки Maven. Именно это система сборки является стандартом де-факто, поэтому решил сделать добавление библиотек чисто, через pom.xml и использовать систему модулей от Maven для работы с кодом JFreeChart и Gantt в одном проекте.
Lombok: тоже невероятно удобная библиотека, чтобы не писать и не поддерживать «портянки» однообразного кода (getter-ы, setter-ы и проч.). Правда, в некоторых случаях отказывался от ее использования, так как надо было переопределить equals и compareTo, но как быстро это сделать в Lombok не нашел.
Журналирование: делаем идеальную Java программу? Значит, без современных средств журналирования никуда. Поэтому берем за основу Simple Logging Facade for Java SLF4J и Logback.
Layout менеджер: в основном использую Miglayout. Достаточно сложный в освоении (в некоторых местах по старинке использую Swing layout manager-ы), но зато краткий. Позволяет делать вот такие интересные эффекты, как на вкладке Detail.
Swingx от Swinglabs: давно заброшенный Java Swing UI tooklit. Активно использую JXTable. Произвольный выбор столбцов таблицы и встроенный поиск по содержимому ячеек облегчают детальный анализ данных истории активных сессий.
Сommons-dbcp2: полезен для создания connection pool подключений к БД. В старой версии использовал доработанную реализацию, которую нашел в Интернет.
Библиотеки, которые переехали из старой версии
Oracle Berkeley DB Java Edition v. 5.0.73: встраиваемая key-value storage. Для хранения агрегированных данных истории активных сессий.
JFreeChart: тысячи проектов для анализа данных написаны с использованием этой библиотеки. Взял за основу экспериментальную версию, которая выложена на github и добавил ее как модуль. Это было сделано для удобства работы с кодом, так как требовались изменения, чтобы Stacked Chart отображал график как нужно.
E-Gantt: библиотека для создания Gantt-графиков в Java Swing. Следов ее сейчас не найти даже в интернетах, увы. Тоже разместил отдельным модулем Maven в проекте.
Из интересного в коде, на что можно обратить внимание
Графический интерфейс
Форма подключения к БД
Полностью переписана с нуля, раньше использовал наработки c открытого проекта Squirrel-sql. Сейчас все в одном файле. Красота!
Интерфейс Top activity/Detail
Здесь без существенных изменений, аналогично как в старой версии, только без просмотра истории.
Детализация по SQL_ID/SESSION_ID
ASH: график активности по определенному SQL_ID, вызывается двойным кликом по строке с SQL_ID из Gantt-графика.
Sql text/plan: для Oracle/Postgres есть возможность получить полный текст запроса. Только для Oracle предоставляются планы выполнения запроса по всем plan_hash_value.
Statistics: данные в табличном виде по SQL_ID: выборка из V$SQL. В коде есть возможность добавлять еще сущности, по которым можно делать выборку (см. реализацию). но нужно быть очень аккуратным, так как могут быть проблемы с производительностью: например, выборка из V$SQLAREA на нагруженных системах работает очень медленно).
Session
ASH: график активности по session_id, аналогично SQL вызывается двойным кликом по строке сессии из Gantt-графика.
Statistics: данные в табличном виде по SQL_ID: выборка из V$SESSION и V$PROCESS. В коде есть возможность добавлять еще сущности, по которым можно делать выборку (см. реализацию).
Oracle ash что это
This chapter describes how to use sampled data to identify transient performance problems in Oracle Database and contains the following topics:
About Active Session History
The Active Session History (ASH) is a diagnostic tool that records the information about all the active sessions in an Oracle database.
The Automatic Database Diagnostics Monitor (ADDM) analysis may not show transient performance problems because they are short-lived. The ASH diagnostic tool captures transient performance problems by taking samples of active sessions every second and storing the sampled data in a circular buffer in the shared global area (SGA). Any session that is connected to the database and is waiting for an event that does not belong to the Idle wait class is considered as an active session. By capturing only active sessions, a manageable set of data is represented with its size being directly related to the work being performed, rather than the number of sessions allowed on the system.
ASH enables you to examine and perform detailed analysis on the sampled session activity using the V$ACTIVE_SESSION_HISTORY view. The data present in ASH can be rolled up in various dimensions that it captures over a specified duration and gathered into an ASH report.
ADDM tries to report the most significant performance problems during an analysis period in terms of their impact on DB time. Whether a performance problem is captured by ADDM depends on its duration compared to the interval between AWR snapshots.
If a performance problem lasts for a significant portion of the time between snapshots, it will be captured by ADDM. For example, if the snapshot interval is set to one hour, then a performance problem that lasts for 30 minutes should not be considered as a transient performance problem because its duration represents a significant portion of the snapshot interval and will likely be captured by ADDM.
If a particular problem lasts for a very short duration, then its severity might be averaged out or minimized by other performance problems in the analysis period, and the problem may not appear in the ADDM findings. Using the same example where the snapshot interval is set to one hour, a performance problem that lasts for only 2 minutes may be a transient performance problem because its duration represents a small portion of the snapshot interval and will likely not show up in the ADDM findings.
Oracle Multitenant Administrator’s Guide for information about how manageability features, such as ASH, work in a multitenant container database.