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

    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 будет недоступен).

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 14

      0
      А если нет доступа к SYSTEM?
        0
        ASHV работает из под любого аккаунта с ролью DBA. Для moats нужен grant select на некоторые вюьхи (скрипт идет в комплекте, нужно просить того у кого есть права загрантить), сам пользователь может не быть DBA.
        0
        А еще, если мне не изменяет память, то «AWR, ADDM, ASH & SQL Tuning Advisor are extra-cost options» и доступны только в Enterprise Edition как дополнительные, платные, фишки. А во всех остальных версиях, после установки БД, их надо отключать.
          +1
          Да, конечно, за дополнительные фукнции на уровне базы нужно платить. Но так как ASHV умеет работать с базами начиная с 8i (а ASH появилось в 10g), то он просто умеет эмулировать функционал ASH. Для этого при создании соединения нужно просто поставить галочку «Standart» вместо «Enterprise» и будут использоваться внутренние алгоритмы.
          Правда, в таком случае, не получится увидеть графики/статистику за период до запуска программы, так как данные теперь аккумулируются самим ASHV, а не оракловым ASH. И будут отсутствовать хинты типа ASH Report.

          MOATS использует только стандартные вьюхи (вроде) и сам считает свою кухню. Поэтому будет работать даже на Standard Edition.
            0
            Спасибо за ценное замечание, не знал об этом, думал что оно полностью базируется на ASH.
            Век живи, век учись.
          –1
          После запуска имеем красивую картинку:
          после запуск имеем
            0
            SQL Exception occured: ORA-00904: «VS».«WAIT_CLASS»: недопустимый идентификатор

            java.lang.NullPointerException
            0
            Эта программа у меня лично не запусталась. Сначала она не видела JDBC-драйвер. Потом когда указал явно использовать OCI driver вместо дефолтного THIN драйвера, стала выдавать ошибку выхода за границы строки (!).
              0
              К сожалению, не настолько хорошо разбираюсь в Java чтобы указать где или что неправильно было сделано. На моих Linux и OS X запустилось без бубнов абсолютно (JDK 1.6). Ставил товарищу на WinXP — тоже без бубнов (JDK 1.5). Правда во всех случаях соединялись на Oracle 10g.
                0
                Возможно дело в том, что я использую другой JDBC драйвер (пытаюсь использовать), не тонкий, в толстый (который OCI).
              +1
              А про Spotlight on Oracle забыли
                +1
                Описываю те инструменты, которыми пользуюсь сам. Для меня у этого продукта Quest Software есть два недостатка — он платный и он под Windows — мне его просто негде запускать.
                0
                За MOATS спасибо, опробую. А то мастерил разные ТОПы на коленке. Поддерживать и обновлять по две версии, для девятки и для десятки, ужас. А Подер молодец, решил проблему одним махом. :)
                  0
                  Спасибо за наводку. Но вообще говоря, для начинающего DBA или совсем не для DBA информация про многие wait-class-ы будет не слишком полезна :) И все-же, большое спасибо за за статью!

                  Only users with full accounts can post comments. Log in, please.