Як відстежувати роботу додатків і їх складових частин в Oracle, Інтеграція додатків і даних, Бази даних, статті

Одним з лих часу був застарілий свавілля донощиків та їх підбурювачів.
Светоній, Життя дванадцяти цезарів: Божественний Тит

Потім Цезар оголошує доноси і викликає свідків …
Тацит, Аннали


Анотація


Давнє засіб SQL Trace дозволяє стежити за виконанням запитів SQL серверними процесами, що обслуговують сеанси зв’язку з СУБД. Системний пакет DBMS_MONITOR починаючи з версії Oracle 10 дозволяє відстежувати видачу запитів більш різноманітно, на таких рівнях, як наприклад служба БД, додаток або його фрагмент, або ж вузол кластера. У статті показано, як це робиться. 


Виборче стеження за виконанням запитів SQL і завантаженням СУБД засобами пакета DBMS_MONITOR


Давнє засіб Oracle SQL Trace дозволяє фіксувати «профіль запитів SQL», які видаються серверними процесами, що обслуговують сеанси зв’язку з СУБД, і представляє з себе корисний інструмент для виявлення проблемних запитів. До версії 10 воно могло включатися і виключатися тільки для конкретних сеансів зв’язку з СУБД. Це далеко не завжди зручно, оскільки в житті більш насущні профілювання і налагодження додатка, Або навіть його фрагментів, а між додатком і сеансом найчастіше немає взаимнооднозначное зв’язку.


Новий для версії 10 пакет DBMS_MONITOR розширив раніше що була можливість трасування дій в рамках сеансу (свого або чужого) можливістю відстеження дій окремих програм і їх частин. Для останньої мети використовується модель «служба БД» – «модуль» – «дія». Між цими поняттями немає формальної залежності, але методично пропонується пов’язувати з “модулем» додаток, що працює з даними, наданими «службою БД», а з «дією» – роботу фрагментів програми. Точніше, засобами пакета можна відстежувати видачу запитів SQL з боку наступних одиниць:



Перегляд і установка одиниць спостереження розглядаються нижче.


До того ж пакет DBMS_MONITOR дозволяє збирати узагальнену статистику виконуваних сеансами або додатками запитів.


Установка одиниць стеження для DBMS_MONITOR і перегляд існуючих значень


Згадані значення одиниць стеження за роботою програми наблюдаеми або з полів таблиць словника-довідника, або з стандартного контексту сеансу з ім’ям USERENV:





































Значення


Поле таблиць


Параметр контексту USERENV сеансу


SERVICE_NAME


V$SESSION, V$SERVICES


SERVICE_NAME


MODULE


V$SESSION


MODULE


ACTION


V$SESSION


ACTION


CLIENT_IDENTIFIER


V$SESSION


CLIENT_IDENTIFIER


SID


V$SESSION


SID


SERIAL#


V$SESSION



INSTANCE_NAME


V$INSTANCE


INSTANCE_NAME


Наприклад, усі значення, крім SERIAL #, наблюдаеми у відповідних параметрах контексту USERENV сеансу зв’язку з СУБД.


Для подальшого перегляду цих параметрів в SQL * Plus зручно підготувати файл з параметризованих зверненням до контексту USERENV допомогою системної функції SYS_CONTEXT:


SELECT SYS_CONTEXT ( “userenv”, “&1” ) AS &1 FROM dual
.
SAVE userenv REPLACE
SET VERIFY OFF 


Установка і приклад перегляду SERVICE_NAME


Значення SERVICE_NAME виставляється автоматично при встановленні з’єднання або програмно за допомогою виклику DBMS_SERVICE.CREATE_SERVICE. Приклад перегляду:


SQL> CONNECT scott/tiger@prima.class
Connected.
SQL> @userenv SERVICE_NAME 


SERVICE_NAME
——————————————————————– 
prima.class


Можливі значення SERVICE_NAME вказуються в мережевих установках Oracle і повинні бути зареєстровані в якості служби БД процесом listener. Значення зареєстрованих в рамках БД служб можна спостерігати в таблиці V $ SERVICES.


Вправа. Переглянути список служб, зареєстрованих для робочої БД. Дати спробу інтерпретації служб SYS $ USERS і SYS $ BACKGROUND. Перевірити припущення.


Приклад установки та перегляду MODULE і ACTION


Значення MODULE і ACTION встановлюються програмно за допомогою пакета DBMS_APPLICATION_INFO. Приклад:


SQL> EXECUTE DBMS_APPLICATION_INFO.SET_MODULE
  2           ( “some module”, “some action” ) 


PL/SQL procedure successfully completed. 


SQL> @userenv MODULE 


MODULE
——————————————————————–
some module 


SQL> @userenv ACTION 


ACTION
——————————————————————–
some action 


SQL> EXECUTE DBMS_APPLICATION_INFO.SET_ACTION ( “” )


PL/SQL procedure successfully completed.


SCOTT> /


ACTION
———————————————————————


SQL> 


Приклад установки та перегляду CLIENT_IDENTIFIER


Значення CLIENT_IDENTIFIER виставляється програмно за допомогою пакета DBMS_SESSION або ж викликом OCI setClientIdentifier (Тільки JDBC у версії 9). Приклад:


SQL> @userenv CLIENT_IDENTIFIER 


CLIENT_IDENTIFIER
———————————————————————


SQL> EXECUTE DBMS_SESSION.SET_IDENTIFIER ( “Web client” )


PL/SQL procedure successfully completed.


/


CLIENT_IDENTIFIER
——————————————————————-
Web client


Призначення CLIENT_IDENTIFIER – «мітити» сеанси кінцевих користувачів, організовані за схемою використання загальних серверних процесів (shared server), зокрема, через сервер додатків (наприклад, додатків для web).


Приклад відстеження запитів SQL з боку програми та його елементів


Процедура SERV_MOD_ACT_TRACE_ENABLE пакета DBMS_MONITOR дозволяє стежити за видачею запитів SQL окремими «додатками», «модулями» у складі програм та «діями» в рамках модулів. Приклад:


DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE (
  service_name  => “prima.class”
, module_name   => “SQL*Plus”
, action_name   => DBMS_MONITOR.ALL_ACTIONS
, waits         => TRUE
, binds         => TRUE
, instance_name => NULL
);
/*
 *  вичікуємо, поки триває робота
 */
DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE (
  service_name  => “prima.class”
, module_name   => “SQL*Plus”
, action_name   => DBMS_MONITOR.ALL_ACTIONS
, instance_name => NULL
);


Для параметра MODULE_NAME по аналогії можна вказати ALL_MODULES.


Таким же чином включається трасування запитів, що надходять з поточного або чужого сеансів (SESSION_TRACE_ENABLE / DISABLE), сеансів, помічених CLIENT_IDENTIFIER (CLIENT_ID_TRACE_ENABLE / DISABLE) і з всіх сеансів підряд, або ж породжуваних певним примірником СУБД, наприклад з конфігурації RAC (DATABASE_TRACE_ENABLE / DISABLE).


Перегляд профілю видачі запитів SQL виконується за допомогою програм tkprof і trcsess. Остання програма стала поставлятися в ПО версії Oracle 10 і як раз-таки і вибирає з трасувань файлів різних процесів дані, пов’язані з зазначеним одиницям стеження. Ось приклад, як може виглядати спільне використання цих програм:


>trcsess output=out.txt module=SQL*Plus c:oracleadminprimaudump*
>tkprof out.txt final.txt


Вправа. Включити трасування всіх запитів SQL, що надходять від SQL * Plus, і спостерігати накопичення профілю видачі запитів. Відключити трасування.


Приклад збору статистики про запити SQL в додатку


Для сеансів, помічених CLIENT_IDENTIFIER, і для додатків, позначених комбінаціями SERVICE_NAME – MODULE – ACTION, пакет DBMS_MONITOR дозволяє не тільки збирати профіль видачі запитів SQL, а й статистику витрат СУБД на обробку запитів.


Приклад зі збором статистики про роботу певних клієнтів. Видамо:


CONNECT / as sysdba
EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_ENABLE ( “Web client” )
HOST sqlplus scott/tiger
EXECUTE DBMS_SESSION.SET_IDENTIFIER ( “Web client” )
SELECT COUNT ( * ) FROM dual;
EXIT


Тут за допомогою команди HOST програми SQL * Plus був здійснений короткий запуск сеансу, позначеного значенням CLIENT_IDENTIFIER = “Web client”.


Продовжимо в первісному сеансі від імені SYS:


SYS> SELECT aggregation_type, primary_id
  2> FROM dba_enabled_aggregations;


AGGREGATION_TYPE      PRIMARY_ID
——————— ——————————————–
CLIENT_ID             Web client


SYS> COLUMN client_identifier FORMAT A20
SYS> COLUMN stat_name         FORMAT A35
SYS> COLUMN value             FORMAT 99999999
SYS> SELECT client_identifier, stat_name, value
  2> FROM v$client_stats
  3> ;


CLIENT_IDENTIFIER    STAT_NAME                               VALUE
——————– ———————————– ———
Web client           user calls                                   4
Web client           DB time                                  807
Web client           DB CPU                                  807
Web client           parse count (total)                    2
Web client           parse time elapsed                421
Web client           execute count                            4
Web client           sql execute elapsed time     1940
Web client           opened cursors cumulative        2


SYS> EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_DISABLE ( “Web client” )


PL/SQL procedure successfully completed.


Ось перелік системних таблиці, що дозволяють контролювати збір статистики і спостерігати результати:


DBA_ENABLED_AGGREGATIONS
V$CLIENT_STATS
V$SERVICE_STATS
V$SERV_MOD_ACT_STATS
V$SERVICEMETRIC
V$SERVICEMETRIC_HISTORY


Останні дві дають детальну інформацію про витрачання процесорного часу.


Це був приклад з використанням процедур CLIENT_ID_STAT_ENABLE / DISABLE. Процедури SERV_MOD_ACT_STAT_ENABLE / DISABLE використовуються аналогічно.


Вправа. Включити збір узагальненої статистики виконання запитів SQL всіх з’єднань до СУБД по SQL * Plus і спостерігати її накопичення. Відключити збір статистики.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*