Oracle: чи існує інструмент для відстеження запитів, наприклад Profiler для сервера SQL? [зачинено]


84

я працюю з сервером sql, але я повинен перейти на додаток з Oracle DB. для відстеження запитів моїх програм у Sql Server я використовую чудовий інструмент Profiler. чи є щось еквівалентне для Oracle?


38
Чому ви прийняли неправильну відповідь? Поясніть план НЕ робить того, що робить профілі. Це абсолютно не пов’язано.
Жасмин

1
ти знайшов найкращий інструмент, як sql server profiler? що ти використовуєш зараз?
Шахід Гафор

Я написав книгу про відстеження програм Oracle. Він доступний у формі PDF за адресою method-r.com .
Кері Міллсап,

Будь ласка, перевірте профайлер oracle у dbForge Studio для Oracle від Devart.
Devart

Нижче наведено багато відповідей, але, як не дивно, ніхто не згадав жодного з двох профілів Oracle для PL / SQL: DBMS_PROFILER(базовий та обмежений, але надзвичайно зручний) або DBMS_HPROF(більш точний, але вимагає додаткових налаштувань). Однак я не знаю SQL Server, тому можливо, він має іншу концепцію профілювання, ніж будь-який з пакетів Oracle, і те, що ви хочете, більше схоже на трасування в Oracle.
Вільям Робертсон,

Відповіді:


22

Ви можете використовувати Oracle Enterprise Manager для моніторингу активних сеансів, із виконуваним запитом, планом його виконання, блокуваннями, деякою статистикою та навіть рядком виконання для довших завдань.

Див .: http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955

Перейдіть до Екземпляра -> сеанси та перегляньте вкладку SQL кожного сеансу.

Є й інші способи. Менеджер підприємств просто додає гарними кольорами те, що вже доступне у спеціальних поданнях, таких як задокументовані тут: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage

І, звичайно, ви також можете скористатися Пояснити ПЛАН НА, інструмент TRACE та багато інших способів інструменталізації. У менеджері підприємства є кілька звітів про найдорожчі запити SQL. Ви також можете шукати останні запити, що зберігаються в кеші.


17

Я знайшов просте рішення

Крок 1. підключитися до БД з адміністратором, використовуючи PLSQL або sqldeveloper або будь-який інший інтерфейс запиту

Крок 2. запустити сценарій нижче; у стовпці S.SQL_TEXT ви побачите виконані запити

SELECT            
 S.LAST_ACTIVE_TIME,     
 S.MODULE,
 S.SQL_FULLTEXT, 
 S.SQL_PROFILE,
 S.EXECUTIONS,
 S.LAST_LOAD_TIME,
 S.PARSING_USER_ID,
 S.SERVICE                                                                       
FROM
 SYS.V_$SQL S, 
 SYS.ALL_USERS U
WHERE
 S.PARSING_USER_ID=U.USER_ID 
 AND UPPER(U.USERNAME) IN ('oracle user name here')   
ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc;

Єдина проблема з цим полягає в тому, що я не можу знайти спосіб показати значення вхідних параметрів (для викликів функцій), але принаймні ми можемо побачити, що виконується в Oracle та порядок цього, не використовуючи певний інструмент.


2
Ви можете додати S.SQL_FULLTEXT, якщо текст запиту перевищує 1000 символів, оскільки SQL_TEXT в цей момент обрізається.
Тридус

2
Ви не повинні замовляти LAST_ACTIVE_TIME, оскільки це VARCHAR2 (19). Використовуйте це замість цього: ЗАМОВИТИ ДО TO_DATE (S.LAST_LOAD_TIME, 'YYYY-MM-DD / HH24: MI: SS') desc
Ігор Крупицький

1
ORA-00942: таблиця або подання не існує 00942. 00000 - "таблиця або подання не існує" * Причина: * Дія: Помилка в рядку: 11 Стовпець: 6 Це означає, що я не маю права адміністратора?
Тоха

Це не включає значення параметра. якщо ви хочете мати , що теж, подивіться на: stackoverflow.com/a/14217618/6339469
HamedH

16
alter system set timed_statistics=true

--або

alter session set timed_statistics=true --if want to trace your own session

- повинен бути досить великим:

select value from v$parameter p
where name='max_dump_file_size' 

- Дізнайтеся sid та серійний номер сеансу, який вас цікавить:

 select sid, serial# from v$session
 where ...your_search_params...

- можна почати трасування з події 10046, четвертий параметр встановлює рівень трасування (12 - найбільший):

 begin
    sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
 end;

- вимкнути трасування із встановленням нульового рівня:

begin
   sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;

/ * можливі рівні: 0 - вимкнено 1 - мінімальний рівень. Подібно до набору sql_trace = true 4 - значення змінних прив'язки додаються до файлу трасування 8 - додаються очікування 12 - додаються як значення змінної прив'язки, так і події очікування * /

- те саме, якщо ви хочете простежити власну сесію з більшим рівнем:

alter session set events '10046 trace name context forever, level 12';

--вимкнути:

alter session set events '10046 trace name context off';

--файл із необробленою інформацією про трасування буде розміщений:

 select value from v$parameter p
 where name='user_dump_dest'

- ім'я файлу (*. trc) міститиме spid:

 select p.spid from v$session s, v$process p
 where s.paddr=p.addr
 and ...your_search_params...

- також ви можете встановити ім'я самостійно:

alter session set tracefile_identifier='UniqueString'; 

- нарешті, використовуйте, TKPROFщоб зробити файл трасування більш читабельним:

C:\ORACLE\admin\databaseSID\udump>
C:\ORACLE\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf
TKPROF: Release 9.2.0.1.0 - Production on Wed Sep 22 18:05:00 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
C:\ORACLE\admin\databaseSID\udump>

--для перегляду стану використання файлу трасування:

set serveroutput on size 30000;
declare
  ALevel binary_integer;
begin
  SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel);
  if ALevel = 0 then
    DBMS_OUTPUT.Put_Line('sql_trace is off');
  else
    DBMS_OUTPUT.Put_Line('sql_trace is on');
  end if;
end;
/

Просто перекладений http://www.sql.ru/faq/faq_topic.aspx?fid=389 Оригінал повніший, але в будь-якому випадку це краще, ніж те, що розміщували інші IMHO


Набагато корисніше за інші відповіді!
Андомар,

Занадто складно. Її ніхто не збирається використовувати.
ADM-IT

7

GI Oracle Profiler v1.2

Це Інструменти для Oracle для збору запитів, що виконуються подібно до SQL Server Profiler. Незамінний інструмент для обслуговування програм, що використовують цей сервер баз даних.

Ви можете завантажити його з офіційного сайту iacosoft.com


Привіт, вам потрібна спеціальна ліцензія ORACLE для використання цього програмного забезпечення? Я знаю, що Oracle дозволяє взаємодіяти з певною таблицею / поданнями, і якщо ви це зробите і не маєте на це ліцензії, вони стягують з вас додаткову плату.
sergiu

2
Привіт, вам потрібно заплатити за запит v $ sqlarea? Я можу ввести посилання, що говорить що?
піо

відмінне спасибі людино !!! Ви економите мені багато роботи
Ерналдо Гонсалес

Якщо мій запит не вдається, він не відображається профілі.
ADM-IT


5

Вбачаючи, що я щойно проголосував нещодавнє запитання як дублікат і вказав у цьому напрямку. . .

Ще пара - у SQL * Plus - SET AUTOTRACE ON - надасть пояснення щодо плану та статистики кожного виконаного оператора.

TOAD також дозволяє проводити профілювання на стороні клієнта.

Недоліком обох з них є те, що вони повідомляють лише план виконання виписки, але не те, як оптимізатор дійшов до цього плану - для цього вам знадобиться трасування на стороні сервера нижчого рівня.

Ще одним важливим для розуміння є знімки Statspack - вони є хорошим способом розглянути ефективність роботи бази даних в цілому. Поясніть план і т. Д. Добре знаходять окремі оператори SQL, які є вузькими місцями. Statspack добре виявляє той факт, що ваша проблема полягає в тому, що просте твердження з хорошим планом виконання викликається 1 мільйон разів на хвилину.


3

Зловити - це Захоплення всього SQL, що виконується між двома моментами часу. Як і SQL Server.

Бувають ситуації, коли корисно зафіксувати SQL, який певний користувач працює в базі даних. Зазвичай ви просто вмикаєте відстеження сеансів для цього користувача, але з цим підходом є дві потенційні проблеми.

  1. Перший - це те, що багато веб-додатків підтримують пул постійних з’єднань з базами даних, якими користуються багато користувачів.
  2. По-друге, деякі програми підключаються, запускають деякий SQL і дуже швидко відключаються, що робить складним увімкнення трасування сеансу взагалі (звичайно, ви можете використовувати тригер входу, щоб увімкнути трасування сеансу в цьому випадку).

Швидке і брудне рішення проблеми полягає у захопленні всіх операторів SQL, які виконуються між двома моментами часу.

Наступна процедура створить дві таблиці, кожна з яких містить знімок бази даних у певній точці. Потім буде здійснено запит щодо таблиць, щоб отримати список усіх запущених SQL протягом цього періоду.

Якщо це можливо, ви повинні робити це в тихій системі розробки - інакше ви ризикуєте отримати занадто багато даних назад.

  1. Зробіть перший знімок Запустіть наступний sql, щоб створити перший знімок:

    create table sql_exec_before as
    select executions,hash_value
    from v$sqlarea
    /
    
  2. Запропонуйте користувачеві виконати своє завдання в додатку.

  3. Зробіть другий знімок.

    create table sql_exec_after as
    select executions, hash_value
    from v$sqlarea
    /
    
  4. Перевірте результати Тепер, коли ви захопили SQL, настав час запитати результати.

У цьому першому запиті будуть перелічені всі виконані хеші запитів:

select  aft.hash_value
from sql_exec_after aft
left outer join sql_exec_before bef
  on aft.hash_value  =  bef.hash_value 
where aft.executions > bef.executions
   or bef.executions is null;
/

Тут буде відображено хеш і сам SQL: встановити сторінки 999 рядків 100, розбити на hash_value

select  hash_value, sql_text
from    v$sqltext
where   hash_value in (
    select  aft.hash_value
    from sql_exec_after aft
    left outer join sql_exec_before bef
      on aft.hash_value  =  bef.hash_value
    where aft.executions > bef.executions
       or bef.executions is null;
)
order by
    hash_value, piece
/

5. Наведіть порядок Не забудьте видалити таблиці знімків, як тільки закінчите:

drop table sql_exec_before
/

drop table sql_exec_after
/

Дякуємо за повні сценарії, що демонструють техніку.
Роман Покровський,

2

Oracle, разом з іншими базами даних, аналізує заданий запит, щоб створити план виконання. Цей план є найефективнішим способом отримання даних.

Oracle надає explain planоператор ' ', який аналізує запит, але не запускає його, замість цього заповнює спеціальну таблицю, до якої можна зробити запит (таблицю плану).

Синтаксис (проста версія, є й інші варіанти, наприклад, позначити рядки в таблиці плану спеціальним ідентифікатором або використовувати іншу таблицю плану):

explain plan for <sql query>

Аналіз цих даних залишається для іншого питання, або ваших подальших досліджень.




Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.