Oracle: SQL 서버용 Profiler와 같은 쿼리를 추적하는 툴이 있습니까?
SQL Server를 사용하는데 Oracle DB를 사용하는 어플리케이션으로 이행해야 합니다.어플리케이션 쿼리를 추적하려면 SQL Server에서 훌륭한 Profiler 도구를 사용합니다.Oracle과 동등한 것이 있습니까?
나는 쉬운 해결책을 찾았다.
스텝 1. PLSQL 또는 sqldeveloper 또는 기타 쿼리 인터페이스를 사용하여 관리자 사용자와 DB에 연결합니다.
스텝 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에서 실행되는 것과 그 순서는 특정 툴을 사용하지 않아도 알 수 있습니다.
Oracle Enterprise Manager를 사용하여 실행 중인 쿼리, 실행 계획, 잠금, 일부 통계 및 더 긴 태스크에 대한 진행 표시줄을 사용하여 활성 세션을 모니터링할 수 있습니다.
참조: http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955
Instance -> sessions로 이동하여 각 세션의 SQL 탭을 확인합니다.
다른 방법이 있어요Enterprise Manager는 여기에 기재되어 있는 http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage과 같은 특별한 뷰에서 이미 이용할 수 있는 것을 예쁜 색상으로 표시합니다.
물론 Provile PLAN FOR, TRACE 도구 및 기타 수많은 기기화 방법도 사용할 수 있습니다.엔터프라이즈 매니저에는 가장 비용이 많이 드는 SQL 쿼리에 대한 몇 가지 보고서가 있습니다.또한 캐시에 저장된 최근 쿼리를 검색할 수도 있습니다.
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 및 serial number를 확인합니다.
select sid, serial# from v$session
where ...your_search_params...
--10046 이벤트로 트레이스를 시작할 수 있습니다.네 번째 파라미터는 트레이스 레벨을 설정합니다(12가 가장 큼).
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
end;
--레벨이 0인 트레이스를 끕니다.
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;
/*최소 레벨: 0 - 꺼짐1 - 최소 레벨set sql_sql=true 4 - bind variables 값이 트레이스 파일에 추가됨8 - waits added 12 - bind variables 값과 wait events가 모두 추가됨*/
--자신의 세션을 큰 레벨로 트레이스 하는 경우는, 다음과 같습니다.
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'
--파일 이름에는 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';
--syslog, 사용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가 올린 글보다 더 좋습니다.
SQL Server Profiler와 유사하게 실행되는 쿼리를 캡처하는 도구 for Oracle입니다.이 데이터베이스 서버를 사용하는 응용 프로그램의 유지보수에 필수적인 도구입니다.
공식 사이트 iacosoft.com 에서 다운로드 할 수 있습니다.
PL/SQL Developer를 사용해 보십시오.프로파일러에 대한 사용자 친화적인 GUI 인터페이스를 갖추고 있습니다.시험 삼아 해보는 건 꽤 좋은 일이야.Oracle 데이터베이스에서 작업할 때 이 툴을 사용하여 맹세합니다.
http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw
최근 질문 하나를 중복해서 투표한 것을 보니...
SQL*Plus - SET AUTOTRACE ON 에서는 실행되는 각 스테이트먼트에 대한 설명 계획 및 통계를 제공합니다.
TOAD에서는 클라이언트 측 프로파일링도 가능합니다.
두 가지 단점은 모두 스테이트먼트의 실행 계획만 알려줄 뿐 옵티마이저가 어떻게 그 계획에 도달했는지는 알 수 없다는 것입니다.그러기 위해서는 낮은 수준의 서버 측 트레이스가 필요합니다.
이해해야 할 또 다른 중요한 것은 Statspack 스냅샷입니다. 이 스냅샷은 데이터베이스 전체의 성능을 확인하는 데 유용합니다.병목현상이 있는 개별 SQL 문을 찾는 데 적합한 계획 등을 설명합니다.Statspack은 적절한 실행 계획을 가진 단순한 스테이트먼트가 1분에 100만 번 호출된다는 사실을 파악하는 데 능숙합니다.
Catch는 두 시점 사이에 실행되는 모든 SQL 캡처입니다.SQL Server도 마찬가지입니다.
특정 사용자가 데이터베이스에서 실행 중인 SQL을 캡처하는 것이 유용한 경우가 있습니다.보통 해당 사용자에 대해 세션트레이스를 이노블로 할 뿐이지만 이 방법에는 두 가지 잠재적인 문제가 있습니다.
- 첫 번째는 많은 웹 기반 애플리케이션이 여러 사용자 간에 공유되는 영구 데이터베이스 연결 풀을 유지 보수한다는 것입니다.
- 두 번째는 일부 응용 프로그램이 연결되고 일부 SQL을 실행하며 매우 빠르게 연결을 끊기 때문에 세션 추적을 활성화하기가 어렵습니다(물론 이 경우 로그온 트리거를 사용하여 세션 추적을 활성화할 수 있습니다.
이 문제에 대한 빠르고 더러운 해결책은 두 시점 사이에 실행되는 모든 SQL 문을 캡처하는 것입니다.
다음 절차에서는 2개의 테이블을 만듭니다.각 테이블에는 특정 포인트의 데이터베이스 스냅샷이 포함됩니다.그런 다음 해당 기간 동안 실행된 모든 SQL 목록을 생성하도록 테이블을 쿼리합니다.
가능하면 조용한 개발 시스템에서 이 작업을 수행해야 합니다. 그렇지 않으면 너무 많은 데이터가 반환될 위험이 있습니다.
첫 번째 스냅샷을 만듭니다.다음 SQL을 실행하여 첫 번째 스냅샷을 만듭니다.
create table sql_exec_before as select executions,hash_value from v$sqlarea /
사용자가 응용 프로그램 내에서 작업을 수행하도록 합니다.
두 번째 스냅샷을 만듭니다.
create table sql_exec_after as select executions, hash_value from v$sqlarea /
결과를 확인합니다. 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 자체를 표시합니다.set pages 999 line 100 break on 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
/
Oracle은 다른 데이터베이스와 함께 지정된 쿼리를 분석하여 실행 계획을 작성합니다.이 플랜이 데이터를 취득하는 가장 효율적인 방법입니다.
Oracle'을 합니다.explain plan
는 쿼리를 분석하지만 실행하지 않고 쿼리할 수 있는 특수 테이블(계획 테이블)을 채웁니다.
구문(단순 버전, 특별한 ID로 평면 테이블의 행을 표시하거나 다른 평면 테이블을 사용하는 등 다른 옵션이 있습니다)은 다음과 같습니다.
explain plan for <sql query>
그 데이터의 분석은 다른 질문이나 추가 조사를 위해 남겨져 있습니다.
Oracle SQL 쿼리를 추적하는 데 사용할 수 있는 상용 도구 FlexTracer가 있습니다.
이 문서는 몇 가지 도구(SQL Trace 및 tkprof)를 포함하여 SQL 쿼리를 추적하는 방법을 설명하는 Oracle 문서입니다.
이 작업을 수행하는 데 도움이 되는 작고 단순하고 저렴한 유틸리티는 없는 것 같습니다.그러나 복잡하고 불편한 방법으로 그것을 하는 101가지 방법이 있다.
다음 기사에서는 몇 가지에 대해 설명합니다.아마 수십 개가 더 있을 거야http://www.petefinnigan.com/ramblings/how_to_set_trace.htm
언급URL : https://stackoverflow.com/questions/148648/oracle-is-there-a-tool-to-trace-queries-like-profiler-for-sql-server
'programing' 카테고리의 다른 글
리액트 후크를 사용하여 자기 증가 카운터 구현 (0) | 2023.02.14 |
---|---|
JSON.stringify() 및 JSON.parse() 사용 시 Date() 관련 문제 (0) | 2023.02.14 |
IntelliJ는 그라들을 사용한 Spring Boot 어플리케이션을 종료하지 않습니다. (0) | 2023.02.14 |
json.dumps와 json.load의 차이점은 무엇입니까? (0) | 2023.02.14 |
wp_nav_menu() 현재 메뉴 항목에 "액티브" 클래스를 추가하는 방법(간단한 방법) (0) | 2023.02.14 |