2017-12-05 31 views
0

Oracle 11g에서 특정 SQL의 응답 시간을 모니터하고 싶습니다 (SQL의 sql_id를 알고 있습니다). 의미, 나는 그것이 실행될 때마다 SQL의 응답 시간을 알고 싶다. 나는 몇 시간 동안 "컴퓨터를 켭 것"이라고 다음과 같은 데이터 뭔가를보고 싶다 :SQL의 각 실행의 측정/모니터링 응답 시간

For sql_id 'abcdefg', following were the execution time (in ms) 10 12 10 13 10 10 10 240 230 10 9 12 … …

우리는 내가 출력을보고 싶은 정확한 형식을 무시할 수 있지만, 어떤 방법에 대한이있다 나 같은 모니터 내가 내 SQL에 대한 모든 실행에 대한 응답 시간을 얻을 수 있습니까?

감사합니다.

답변

1

첫째로, 당신은 당신의 SQL을 추적한다 (sql_id 가정 6b0z40gs9m759를)

/u01/app/oracle/admin/MYDB11G/udump/mydb11g_ora_TrcSqlParag.trc 

추적 파일 읽기 쉬운 일이 아닙니다, 우리가 필요

SQL> ALTER SESSION SET sql_trace=TRUE; 

SQL> ALTER SESSION SET EVENTS 'trace[rdbms.SQL_Optimizer.*][sql:6b0z40gs9m759]'; 
[ SQL> ALTER SYSTEM SET EVENTS 'sql_trace [sql:&&sql_id] bind=true, wait=true'; ] -- or use this as alternative. 

SQL> ALTER SESSION SET TRACEFILE_IDENTIFIER = "TrcSqlParag"; -- adds this text to your trace file and makes it more recognizable by you. 

SQL> SHOW PARAMETER user_dump_dest -- trace files are produced in this directory 

-- For 11g DB, you may easily query v$diag_info view to see your file destination : 
SQL> SELECT value FROM v$diag_info WHERE name = 'Default Trace File'; 

-- You can identify the trace file for a specific session using the V$SESSION and V$PROCESS views : 
SQL> SELECT p.tracefile FROM v$session s JOIN v$process p ON s.paddr = p.addr WHERE s.sid = &ses_id; 

-- You may finish tracing whenever you want : 
SQL> ALTER SESSION SET sql_trace=FALSE; 

이의는 덤프 파일을 보자 tkprof utility OS에서 읽으려면 :

$ cd /u01/app/oracle/admin/MYDB11G/udump/ 
$ tkprof mydb11g_ora_TrcSqlParag.trc TrcSqlParag_Translated1.txt explain=<username>/<pwd>@mydb11g table=sys.plan_table sys=no waits=yes 
+1

안녕하세요 Barbaros, ackoverflow 지침은 "감사합니다"라고 말하면서 주석을 달지 않는다고 말하면서, 나는 지금 당장 그것을 말하고 있습니다. 당신이 말한 것을 시험해 보았고 내 특정 세션에서 효과가 있었기 때문에 전체 응용 프로그램에서이 작업을 수행하려고합니다 ("세션 변경"대신 "시스템 변경"을하는 것으로 추측합니다). 데이터를 대조하고 마지막으로 내가 찾고있는 쿼리 응답 시간을 얻습니다. 이렇게 정교하게 작성된 세부 단계 (심지어 "맞춤화 된 단계"도)에 감사드립니다. 이틀 후에 실을 업데이트 할 것입니다. –

+1

안녕하세요 Barbaros, "시스템 변경"으로 위의 내용을 시도했는데 문제가 발생했습니다. 추적 파일을 식별 할 수 없기 때문에 약간의 고통이있었습니다. stmt.executeQuery 바로 전에, 그리고 그 후에 한 번 전체 결과 집합을 반복 한 후에 Java 코드에 시스템 시간이 걸립니다. 그런 다음 각 단계마다 소요되는 시간을 인쇄합니다. 내가 추적에서 얻은 수치를이 수치에 매핑하고 숫자를 서로 연관시키는 데 어려움을 겪고 있습니다. 흥미로운 것을 발견하면 더 많이 시도하고 스레드에 추가 할 것입니다. –