Предыстория (2008 г.)
По работе часто приходилось разбираться с производительностью серверов БД Oracle. После выхода Oracle 10g задача по мониторингу и диагностике проблем с производительностью значительно упростилась – с помощью истории активных сессий (Active Session History, ASH) стало возможно узнать, что происходило с БД в прошлом, что творится на сервере в данный момент, и даже прогнозировать, что будет происходить с нагрузкой в будущем.
Но, во-первых, процесс миграции на новую версию достаточно длительный, и некоторые заказчики продолжали использовать старые версии. А во-вторых, средства визуализации истории активных сессий от Oracle, которые имелись в наличии:
Из сторонних бесплатных средств, похожая функциональность была реализована в утилите ASHMON за авторством Kyle Hailey. Но функционал был только для просмотра, и работала она под одну платформу – Windows.
В общем, после рассмотрения всех доступных на тот момент вариантов, было принято волевое решение собирать свой «велосипед» из подручных материалов.
Требования к приложению:
Ингредиенты:
Общая информация об 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.
Прочее:
Варианты использования:
Полезные ссылки:
Страница проекта на SourceForge.net.
Страница проекта на GitHub.
Запись действий на экране в gif файл — ScreenToGif
Утилита для нагрузочного тестирования баз данных — Hummerora.
Спасибо за внимание!
По работе часто приходилось разбираться с производительностью серверов БД Oracle. После выхода Oracle 10g задача по мониторингу и диагностике проблем с производительностью значительно упростилась – с помощью истории активных сессий (Active Session History, ASH) стало возможно узнать, что происходило с БД в прошлом, что творится на сервере в данный момент, и даже прогнозировать, что будет происходить с нагрузкой в будущем.
Но, во-первых, процесс миграции на новую версию достаточно длительный, и некоторые заказчики продолжали использовать старые версии. А во-вторых, средства визуализации истории активных сессий от Oracle, которые имелись в наличии:
- Требовали некоторых телодвижений по их установке и настройке – это Oracle Enterprise Manager Console (DB Console) или Oracle Enterprise Manager Grid Control (сейчас Oracle Enterprise Manager Cloud Control). DB Console из моей (и не только) практики требовал для установки применения очень сильных админских заклятий. Также в целях экономии ресурсов не все хотят ставить на сервера БД дополнительные сервисы или разворачивать на своей площадке отдельную инфраструктуру для мониторинга;
- Обладали рядом архитектурных недостатков. К примеру, в случае зависания сервера БД доступ к информации из истории активных сессий посредством Oracle Enterprise Manager Console становился невозможным, и оперативно выяснить, что «что-то пошло не так» (с) было практически нереально;
- Отсутствовала функциональность в части сохранения данных мониторинга и последующего его анализа на своей площадке.
Из сторонних бесплатных средств, похожая функциональность была реализована в утилите ASHMON за авторством Kyle Hailey. Но функционал был только для просмотра, и работала она под одну платформу – Windows.
В общем, после рассмотрения всех доступных на тот момент вариантов, было принято волевое решение собирать свой «велосипед» из подручных материалов.
Требования к приложению:
- Независимость от установленных на базе данных у клиента средств мониторинга;
- Возможность сохранения результатов мониторинга в локальной базе данных для последующей их обработки;
- Расширяемость. Возможность добавления функциональности при необходимости;
- Кроссплатформенность. Работа программы как в Unix/Linux, так и в Windows окружении.
Ингредиенты:
- Oracle Berkeley DB Java Edition v. 3.3.75. Встраиваемая key value storage. Для хранения данных истории активных сессий;
- JFreeChart v. 1.0.12. Библиотека для создания графиков на Java SE. Для решения задачи подошел stacked chart. Основные изменения для достижения требуемого результата – аналогично тому, как в Oracle Enterprise Manager – см. ChartPanel;
- E-Gantt v.0.5.3. Библиотека для создания Gantt графиков в Java Swing;
- SwingLabs Swing Component Extensions v. 0.9.5. Для более удобного вывода табличных данных, календарь и т.д.;
- Joda Time – Java date and time API v.1.6. Отличная библиотека для работы с датами в Java;
- Blanco SQL Formatter v. 0.1.1. Форматирование sql, pl/sql кода;
- jEdit Syntax Package v. 2.2.2.Для подсветки sql, pl/sql кода.
Общая информация об 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.
Прочее:
- В случае если отсутствует подключение к БД (сбои в сети, проблемы с листенером, перезапуск БД), ASH Viewer автоматически пытается подключиться к серверу Oracle через каждые 30 секунд для продолжения сбора информации об истории активных сессий;
- Есть возможность в настройках указать сбрасывать в буфер обмена ОС данные из топ SQL/PL/SQL-операторов.
Варианты использования:
- Текущий мониторинг производительности СУБД Oracle;
- Просмотр истории активных сессий за предыдущий период наблюдения;
- Создание отчетов по работе БД Oracle.
Полезные ссылки:
Страница проекта на SourceForge.net.
Страница проекта на GitHub.
Запись действий на экране в gif файл — ScreenToGif
Утилита для нагрузочного тестирования баз данных — Hummerora.
Спасибо за внимание!