Когда идет разработка, связанная с базами данных, практически всегда присутсвует необходимость посмотреть чем занята база в данный конкретный момент времени.
Если к администратору БД подходит разработчик и просит посмотреть почему его запрос «тормозит», то матерый DBA достанет собственноручно написанные скрипты-обертки над скрытыми x$ views и вмиг скажет, что является причиной расстройства разработчика.
Но если DBA не так суров? Он начинающий DBA или вообще не DBA, а просто следит за базой?
В этом ему помогут инструменты описанные под катом.
Самый удобный способ посмотреть чем занята база — это использование Oracle Enterprise Manager. Вернее, если речь идет об одной базе, Database Manager.
Это web-интерфейс, который позволяет просматривать состояние базы, осуществлять административные действия и настраивать базу.
Думаю, многим известен экран Top Activity:
Который показывает что в данный момент творится в базе. Он удобный, красивый, и его можно показать начальству :)
Но что делать если установка OEM нецелесообразна или база данных сконфигурирована без Enterprise Manager? В этом нам поможет
Бесплатная, небольшая, графическая утилита написанная на Java.
Скачать можно Sourceforge: sourceforge.net/projects/ashv
До первого запуска нужно отредактировать run.sh (или run.bat) и заменить JAVA_HOME на актуальный. Также необходимо подложить драйвер для Oracle DB (ojdbc14.jar) в lib/ чтобы программа могла подключится к базе. Для того чтобы подключится к базе достаточно знать SID/IP/port и пользователя/пароль. После запуска имеем красивую картинку:
Интерфейс практически повторяет Top Sessions из OEM а поэтому легок в освоении.
При наведении курсора на SQL ID появляется подсказка с текстом SQL. Так же текст SQL можно посмотреть во вкладке SQL Text:
Доступен и план запроса, в соответствующей вкладке:
Также доступна статистика про кеш и то какие ивенты были в выделенный момент времени:
Если нужно посмотреть графики по каждому классу метрик отдельно, существует вкладка Detail:
Вся статистика сохраняется локально и в будущем можно просмотреть статистику за прошлые дни когда запускался ASH Viewer:
Авторы обещают поддержку Oracle DB начиная с 8i.
ASH Viewer удобен если нет доступа к OEM и можно настроить файрвол (или ssh тунель) для доступа к базе. Однако эти условия тоже не всегда выполняются. И может понадобится посмотреть загрузку базы когда рядом нет установленного ASHV или когда под рукой только SSH.
Выход — мониторинг на самом сервере, например через sqlplus. Все что нужно, это использовать
Как отмечают разработчики эта аббревиатура расшифровывается как The (M)other (O)f (A)ll (T)uning (S)cripts. Скрипт предоставляет возможность мониторинга Top sessions и Top waits прямо (и только) из консоли sqlplus!
После несложной процедуры инсталяции утилиты для определенного пользователя он сможет наблюдать похожую картинку прямо из консоли:
Я немного подрезал пример по ширине, чтобы он влез в статью. Пример использования можно посмотреть в авторском видео:
А загрузить скрипт можно с сайта: 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 будет недоступен).
Если к администратору БД подходит разработчик и просит посмотреть почему его запрос «тормозит», то матерый DBA достанет собственноручно написанные скрипты-обертки над скрытыми x$ views и вмиг скажет, что является причиной расстройства разработчика.
Но если DBA не так суров? Он начинающий DBA или вообще не DBA, а просто следит за базой?
В этом ему помогут инструменты описанные под катом.
Enterprise manager
Самый удобный способ посмотреть чем занята база — это использование Oracle Enterprise Manager. Вернее, если речь идет об одной базе, Database Manager.
Это web-интерфейс, который позволяет просматривать состояние базы, осуществлять административные действия и настраивать базу.
Думаю, многим известен экран Top Activity:
Который показывает что в данный момент творится в базе. Он удобный, красивый, и его можно показать начальству :)
Но что делать если установка 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 и пользователя/пароль. После запуска имеем красивую картинку:
Интерфейс практически повторяет Top Sessions из OEM а поэтому легок в освоении.
При наведении курсора на SQL ID появляется подсказка с текстом SQL. Так же текст SQL можно посмотреть во вкладке SQL Text:
Доступен и план запроса, в соответствующей вкладке:
Также доступна статистика про кеш и то какие ивенты были в выделенный момент времени:
Если нужно посмотреть графики по каждому классу метрик отдельно, существует вкладка Detail:
Вся статистика сохраняется локально и в будущем можно просмотреть статистику за прошлые дни когда запускался ASH Viewer:
Авторы обещают поддержку 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 будет недоступен).