Pull to refresh

Database: просмотр Top Activity без Enterprise Manager

Reading time4 min
Views11K
imageКогда идет разработка, связанная с базами данных, практически всегда присутсвует необходимость посмотреть чем занята база в данный конкретный момент времени.
Если к администратору БД подходит разработчик и просит посмотреть почему его запрос «тормозит», то матерый DBA достанет собственноручно написанные скрипты-обертки над скрытыми x$ views и вмиг скажет, что является причиной расстройства разработчика.

Но если DBA не так суров? Он начинающий DBA или вообще не DBA, а просто следит за базой?
В этом ему помогут инструменты описанные под катом.


Enterprise manager


Самый удобный способ посмотреть чем занята база — это использование Oracle Enterprise Manager. Вернее, если речь идет об одной базе, Database Manager.
Это web-интерфейс, который позволяет просматривать состояние базы, осуществлять административные действия и настраивать базу.
Думаю, многим известен экран Top Activity:
image
Который показывает что в данный момент творится в базе. Он удобный, красивый, и его можно показать начальству :)
Но что делать если установка OEM нецелесообразна или база данных сконфигурирована без Enterprise Manager? В этом нам поможет

ASH Viewer


Бесплатная, небольшая, графическая утилита написанная на Java.
Скачать можно Sourceforge: sourceforge.net/projects/ashv
До первого запуска нужно отредактировать run.sh (или run.bat) и заменить JAVA_HOME на актуальный. Также необходимо подложить драйвер для Oracle DB (ojdbc14.jar) в lib/ чтобы программа могла подключится к базе. Для того чтобы подключится к базе достаточно знать SID/IP/port и пользователя/пароль. После запуска имеем красивую картинку:
image

Интерфейс практически повторяет Top Sessions из OEM а поэтому легок в освоении.
При наведении курсора на SQL ID появляется подсказка с текстом SQL. Так же текст SQL можно посмотреть во вкладке SQL Text:
image

Доступен и план запроса, в соответствующей вкладке:
image

Также доступна статистика про кеш и то какие ивенты были в выделенный момент времени:
image

Если нужно посмотреть графики по каждому классу метрик отдельно, существует вкладка Detail:
image

Вся статистика сохраняется локально и в будущем можно просмотреть статистику за прошлые дни когда запускался ASH Viewer:
image

Авторы обещают поддержку Oracle DB начиная с 8i.
ASH Viewer удобен если нет доступа к OEM и можно настроить файрвол (или ssh тунель) для доступа к базе. Однако эти условия тоже не всегда выполняются. И может понадобится посмотреть загрузку базы когда рядом нет установленного ASHV или когда под рукой только SSH.
Выход — мониторинг на самом сервере, например через sqlplus. Все что нужно, это использовать

MOATS


Как отмечают разработчики эта аббревиатура расшифровывается как The (M)other (O)f (A)ll (T)uning (S)cripts. Скрипт предоставляет возможность мониторинга Top sessions и Top waits прямо (и только) из консоли sqlplus!
После несложной процедуры инсталяции утилиты для определенного пользователя он сможет наблюдать похожую картинку прямо из консоли:
+ INSTANCE SUMMARY -----------------------------------------------------------------------------+
| Instance: ora112         | Execs/s:  2.0 | sParse/s: 0.0 | LIOs/s: 219637.3 | Read MB/s:  0.0 |
| Cur Time: 13-Aug 19:25:14| Calls/s:  0.0 | hParse/s: 0.0 | PhyRD/s:     0.5 | Write MB/s: 0.0 |
| History:  0h 0m 26s      | Commits/s:0.0 | ccHits/s: 1.5 | PhyWR/s:     2.9 | Redo MB/s:  0.0 |
+-----------------------------------------------------------------------------------------------+

+ TOP SQL_ID (child#) -----+ TOP SESSIONS -+ + TOP WAITS -------------------------+ WAIT CLASS -+
|  50% | bwx4var9q4y9f (0) | 71            | | 100% | latch: cache buffers chains | Concurrency |
|  50% | bq2qr0bhjyv1c (0) | 133           | |  50% | SQL*Net message to client   | Network     |    
|  50% | 799uuu8tpf6rk (0) | 6             | |                                    |             |    
+------------------------------------------+ +--------------------------------------------------+

+ TOP SQL_ID -+ PLAN_HASH_VALUE + SQL TEXT -----------------------------------------------------+
| bwx4var9q4y9| 2119813036      | select  /*+ full(a) full(b) use_nl(a b) */  count(*) from     |
|             |                 | ys.obj$ b where  a.name = b.name and rownum <= 1000002        |
+ --------------------------------------------------------------------------------------------- +
| bq2qr0bhjyv1| 644658511       | select moats_ash_ot( systimestamp, saddr, sid, serial#,       |
|             |                 | audsid, paddr, er#, username, command, ownerid, taddr         |
+ --------------------------------------------------------------------------------------------- +
| 799uuu8tpf6r| 2119813036      | select  /*+ full(a) full(b) use_nl(a b) */  count(*) from     |
|             |                 | ys.obj$ b where  a.name = b.name and rownum <= 1000001        |
+ --------------------------------------------------------------------------------------------- +

Я немного подрезал пример по ширине, чтобы он влез в статью. Пример использования можно посмотреть в авторском видео:


А загрузить скрипт можно с сайта: www.oracle-developer.net/utilities.php Правда для его работы необходим Oracle не менее чем 10gR2.

UPD: Уточнение по поводу лицензирования некоторых функций. ASHV по-умолчанию использует Active Session History (ASH) доступную начиная с 10g. ASH входит в Oracle Diagnostic Pack, и для его использования должна быть лицензия на ODP.
Но так как ASHV также поддерживает Oracle 9i(8i) на которых функционал ASH эмулируется, то при соединении на 10g можно выбрать тип базы Standard и тогда ASH будет эмулироваться и на 10g (правда некоторый функционал Diagnostic Pack, такой как AWR или ASH reports будет недоступен).
Tags:
Hubs:
Total votes 19: ↑18 and ↓1+17
Comments14

Articles