Pracuję z serwerem sql, ale muszę przeprowadzić migrację do aplikacji z Oracle DB. do śledzenia zapytań aplikacji w Sql Server używam wspaniałego narzędzia Profiler. czy jest coś równoważnego dla Oracle?
sql-server
oracle
profiler
stefano m
źródło
źródło
sql server profiler
? czego teraz używasz?DBMS_PROFILER
(podstawowy i ograniczony, ale super wygodny) lubDBMS_HPROF
(dokładniejszy, ale wymaga więcej konfiguracji). Jednak nie znam SQL Server, więc możliwe, że ma inną koncepcję profilowania niż którykolwiek z pakietów Oracle, a to, czego potrzebujesz, przypomina śledzenie w Oracle.Odpowiedzi:
Możesz użyć Oracle Enterprise Manager do monitorowania aktywnych sesji, z wykonywanym zapytaniem, jego planem wykonania, blokadami, niektórymi statystykami, a nawet paskiem postępu dla dłuższych zadań.
Zobacz: http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955
Przejdź do Instancja -> sesje i obserwuj zakładkę SQL każdej sesji.
Są inne sposoby. Menedżer przedsiębiorstwa po prostu dodaje ładnymi kolorami to, co jest już dostępne w widokach specjalnych, takich jak te udokumentowane tutaj: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage
Oczywiście możesz także skorzystać z narzędzia Explain PLAN FOR, TRACE i wielu innych sposobów instrumentalizacji. W menedżerze przedsiębiorstwa znajduje się kilka raportów dotyczących najbardziej kosztownych zapytań SQL. Możesz również przeszukiwać ostatnie zapytania przechowywane w pamięci podręcznej.
źródło
Znalazłem proste rozwiązanie
Krok 1. połącz się z DB z administratorem za pomocą PLSQL lub sqldeveloper lub dowolnego innego interfejsu zapytań
Krok 2. uruchom skrypt poniżej; w kolumnie S.SQL_TEXT zobaczysz wykonane zapytania
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;
Jedynym problemem jest to, że nie mogę znaleźć sposobu na pokazanie wartości parametrów wejściowych (dla wywołań funkcji), ale przynajmniej możemy zobaczyć, co jest uruchamiane w Oracle i kolejność bez użycia określonego narzędzia.
źródło
alter system set timed_statistics=true
--lub
alter session set timed_statistics=true --if want to trace your own session
- musi być wystarczająco duży:
select value from v$parameter p where name='max_dump_file_size'
- Sprawdź numer identyfikacyjny i numer seryjny sesji, która Cię interesuje:
select sid, serial# from v$session where ...your_search_params...
- możesz rozpocząć śledzenie od zdarzenia 10046, czwarty parametr ustawia poziom śledzenia (12 jest największy):
begin sys.dbms_system.set_ev(sid, serial#, 10046, 12, ''); end;
- wyłącz śledzenie z ustawieniem poziomu zerowego:
begin sys.dbms_system.set_ev(sid, serial#, 10046, 0, ''); end;
/ * możliwe poziomy: 0 - wyłączone 1 - minimalny poziom. Podobnie jak set sql_trace = true 4 - wartości zmiennych powiązań są dodawane do pliku śledzenia 8 - dodawane są oczekiwania 12 - dodawane są zarówno wartości zmiennych wiązania, jak i zdarzenia oczekiwania * /
- to samo, jeśli chcesz śledzić własną sesję na wyższym poziomie:
alter session set events '10046 trace name context forever, level 12';
--wyłączyć:
alter session set events '10046 trace name context off';
--plik z nieprzetworzonymi informacjami o śledzeniu zostanie zlokalizowany:
select value from v$parameter p where name='user_dump_dest'
--nazwa pliku (*. trc) będzie zawierać spid:
select p.spid from v$session s, v$process p where s.paddr=p.addr and ...your_search_params...
- możesz też samodzielnie ustawić nazwę:
alter session set tracefile_identifier='UniqueString';
- w końcu użyj,
TKPROF
aby plik śledzenia był bardziej czytelny: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>
- aby wyświetlić stan użycia pliku śledzenia:
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; /
Po prostu przetłumaczone http://www.sql.ru/faq/faq_topic.aspx?fid=389 Oryginał jest pełniejszy, ale i tak jest lepszy niż to, co inni opublikowali IMHO
źródło
GI Oracle Profiler v1.2
To narzędzia dla Oracle do przechwytywania zapytań wykonywanych podobnie do SQL Server Profiler. Niezastąpione narzędzie do obsługi aplikacji korzystających z tego serwera bazy danych.
można go pobrać z oficjalnej strony iacosoft.com
źródło
Wypróbuj PL / SQL Developer, ma przyjemny, przyjazny dla użytkownika interfejs GUI do profilera. To całkiem fajne, wypróbować proces. Przysięgam na to narzędzie podczas pracy z bazami danych Oracle.
http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw
źródło
Widząc, że właśnie zagłosowałem na ostatnie pytanie jako duplikat i wskazałem w tym kierunku. . .
Jeszcze kilka - w SQL * Plus - SET AUTOTRACE ON - poda plan wyjaśnienia i statystyki dla każdej wykonywanej instrukcji.
TOAD umożliwia również profilowanie po stronie klienta.
Wadą obu z nich jest to, że podają tylko plan wykonania instrukcji, ale nie podają, w jaki sposób optymalizator doszedł do tego planu - do tego potrzebne będzie śledzenie po stronie serwera niższego poziomu.
Innym ważnym elementem do zrozumienia są migawki Statspack - są one dobrym sposobem spojrzenia na wydajność bazy danych jako całości. Wyjaśnij plan itp. Są dobre w znajdowaniu pojedynczych instrukcji SQL, które stanowią wąskie gardła. Statspack jest dobry w identyfikowaniu faktu, że Twoim problemem jest to, że proste polecenie z dobrym planem wykonania jest wywoływane milion razy na minutę.
źródło
Catch is Capture all SQL run pomiędzy dwoma punktami w czasie. Podobnie jak SQL Server.
Istnieją sytuacje, w których przydatne jest przechwycenie kodu SQL, który dany użytkownik uruchamia w bazie danych. Zwykle po prostu włączasz śledzenie sesji dla tego użytkownika, ale z takim podejściem wiążą się dwa potencjalne problemy.
Szybkim i brudnym rozwiązaniem problemu jest przechwycenie wszystkich instrukcji SQL wykonywanych między dwoma punktami w czasie.
Poniższa procedura utworzy dwie tabele, z których każda zawiera migawkę bazy danych w określonym punkcie. Tabele zostaną następnie poproszone o utworzenie listy wszystkich SQL uruchomionych w tym okresie.
Jeśli to możliwe, powinieneś to zrobić w cichym systemie programistycznym - w przeciwnym razie ryzykujesz odzyskanie zbyt dużej ilości danych.
Zrób pierwszą migawkę Uruchom następujący sql, aby utworzyć pierwszą migawkę:
create table sql_exec_before as select executions,hash_value from v$sqlarea /
Poproś użytkownika o wykonanie zadania w aplikacji.
Zrób drugą migawkę.
create table sql_exec_after as select executions, hash_value from v$sqlarea /
Sprawdź wyniki Po przechwyceniu kodu SQL przyszedł czas na zapytanie o wyniki.
To pierwsze zapytanie wyświetli wszystkie skróty zapytań, które zostały wykonane:
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; /
Ten wyświetli hash i sam SQL: ustaw strony 999 linii 100 break na 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. Porządkowanie Nie zapomnij usunąć tabel migawek po zakończeniu:
drop table sql_exec_before / drop table sql_exec_after /
źródło
Oracle wraz z innymi bazami danych analizuje dane zapytanie w celu stworzenia planu wykonania. Ten plan jest najskuteczniejszym sposobem pobierania danych.
Oracle udostępnia instrukcję „
explain plan
”, która analizuje zapytanie, ale go nie uruchamia, zamiast tego wypełnia specjalną tabelę, do której można przeszukiwać (tabelę planu).Składnia (wersja prosta, istnieją inne opcje, takie jak oznaczanie wierszy w tabeli planu specjalnym identyfikatorem lub użycie innej tabeli planu):
explain plan for <sql query>
Analiza tych danych jest pozostawiona do innego pytania lub dalszych badań.
źródło
Istnieje komercyjne narzędzie FlexTracer, którego można używać do śledzenia zapytań Oracle SQL
źródło
To jest dokument Oracle wyjaśniający, jak śledzić zapytania SQL, w tym kilka narzędzi (SQL Trace i tkprof)
połączyć
źródło
Najwyraźniej nie ma małego, prostego i taniego narzędzia, które pomogłoby w wykonaniu tego zadania. Jest jednak 101 sposobów na zrobienie tego w skomplikowany i niewygodny sposób.
Poniższy artykuł opisuje kilka. Prawdopodobnie jest ich dziesiątki więcej ... http://www.petefinnigan.com/ramblings/how_to_set_trace.htm
źródło