"10384 event"의 두 판 사이의 차이
DB CAFE
(→10384 event 트레이스) |
(→10384 event 트레이스) |
||
(같은 사용자의 중간 판 11개는 보이지 않습니다) | |||
12번째 줄: | 12번째 줄: | ||
# 10384 이벤트에서 쿼리는 여전히 병렬 실행 계획을 가지고 있지만, 쿼리 코디네이터(QC)만 이 SQL 명령을 실행하고 병렬 슬레이브가 시작되지 않습니다. | # 10384 이벤트에서 쿼리는 여전히 병렬 실행 계획을 가지고 있지만, 쿼리 코디네이터(QC)만 이 SQL 명령을 실행하고 병렬 슬레이브가 시작되지 않습니다. | ||
# 따라서 1개의 프로세스만 실행되므로 실제 행과 같은 정보를 더 쉽게 수집할 수 있습니다. | # 따라서 1개의 프로세스만 실행되므로 실제 행과 같은 정보를 더 쉽게 수집할 수 있습니다. | ||
+ | * 다음 명령은 직렬실행계획(serial paln)을 만들고 병렬 실행 계획과 다르다. | ||
+ | *:<source lang=sql>alter session disable parallel query;</source> | ||
+ | * 이 예시는 차이를 보여주기 위해 gather_plan_statistics 힌트를 사용 | ||
+ | <source lang=sql> | ||
+ | SQL> set linesize 150 | ||
+ | SQL> set pagesize 2000 | ||
+ | SQL> alter session set events '10384 trace name context forever , level 16384'; | ||
+ | SQL> select /*+ gather_plan_statistics */ * from emp e; | ||
+ | SQL> select * from TABLE(dbms_xplan.display_cursor( null, null, 'ALL IOSTATS LAST')) | ||
+ | SQL> alter session set events '10384 trace name context off'; | ||
+ | Here is the output with the event 16384 | ||
+ | ------------------------------------------------------------------------------------------ | ||
+ | |Id|Operation |Name|Start|E-Row|E-Byte|Cost| TQ |IN-OU|PQ Distr |A-Row|Buffer| | ||
+ | ------------------------------------------------------------------------------------------ | ||
+ | | 1| PX COORDINATOR | | 1 | | | | | | | 14 | 9 | | ||
+ | | 2| PX SEND QC (RANDOM)|:TQ1| 1 | 14 | 518 | 2 |Q1,00|P->S |QC (RAND)| 14 | 9 | | ||
+ | | 3| PX BLOCK ITERATOR | | 1 | 14 | 518 | 2 |Q1,00|PCWC | | 14 | 9 | | ||
+ | |*4| TABLE ACCESS FULL|EMP | 1 | 14 | 518 | 2 |Q1,00|PCWP | | 14 | 9 | | ||
+ | ------------------------------------------------------------------------------------------ | ||
+ | and here is the output without the event 10384 | ||
+ | |||
+ | ------------------------------------------------------------------------------------------ | ||
+ | |Id|Operation |Name|Start|E-Row|E-Byte|Cost| TQ |IN-OU|PQ Distr |A-Row|Buffer| | ||
+ | ------------------------------------------------------------------------------------------ | ||
+ | | 1| PX COORDINATOR | | 1 | | | | | | | 14 | 2 | | ||
+ | | 2| PX SEND QC (RANDOM)|:TQ1| 0 | 14 | 518 | 2 |Q1,00|P->S |QC (RAND)| 0 | 0 | | ||
+ | | 3| PX BLOCK ITERATOR | | 0 | 14 | 518 | 2 |Q1,00|PCWC | | 0 | 0 | | ||
+ | |*4| TABLE ACCESS FULL|EMP | 0 | 14 | 518 | 2 |Q1,00|PCWP | | 0 | 0 | | ||
+ | ------------------------------------------------------------------------------------------ | ||
+ | |||
+ | </source> | ||
+ | * 차이점은 2단계에서 4단계까지 볼 수 있는 이벤트가 없으면 A-Row 열이 숫자 0을 보여준다는 것입니다. | ||
+ | * /*+ gather_plan_statistics */ 힌트는 쿼리 코디네이터의 정보만 수집하고 병렬 슬레이브와 쿼리 코디네이터의 통계를 결합하지 않습니다. | ||
+ | * 2에서 4까지의 단계는 슬레이브에 의해 실행되며 쿼리 코디네이터가 작업을 수행하지 않습니다. 이것이 A-Row 열에 0이 보이는 이유입니다. | ||
+ | * 레벨 16384의 이벤트 10384를 사용하는 데 도움이 되며 QC만 작동하고 A-Rows 열은 실제 행 수를 보여줍니다. | ||
+ | * A-Time과 같은 일부 데이터는 이벤트 10384와 함께 병렬 실행과 직렬 실행 간에 변경될 수 있습니다. | ||
+ | * 즉, 이벤트가 각 행 단계에서 실제 행과 같은 더 쉬운 정보를 얻는 데 도움이 될 수 있다는 것을 의미한다. | ||
+ | * 근본적으로 나쁜 실행 계획이 아닌 느린 병렬 문제를 분석할 때 도움이 되지 않을 수 있습니다. | ||
+ | * 10046으로 세션 추적하기 | ||
+ | *: 이벤트 10046과 10384로 세션을 추적하면 다음을 해야 합니다: | ||
+ | <source lang=sql> | ||
+ | alter session set events '10384 trace name context forever , level 16384'; | ||
+ | alter session set events '10046 trace name context forever , level 8'; | ||
+ | <your parallel query goes here> | ||
+ | alter session set events '10046 trace name context off'; | ||
+ | alter session set events '10384 trace name context off'; | ||
+ | </source> | ||
+ | * 힌트 /*+ gather_plan_statistics */의 경우와 같은 효과를 볼 수 있습니다. QC trace파일은 이벤트 10384 레벨 16384를 사용하지 않으면 슬레이브가 작업을 수행하는 행 소스에 대해 0을 보여줍니다. | ||
+ | * 이벤트 10384 레벨 16384를 사용하면 쿼리 코디네이터에서 1개의 추적 파일만 생성됩니다. |
2024년 8월 22일 (목) 18:36 기준 최신판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
10384 event 트레이스[편집]
alter session set events '10384 trace name context forever , level 16384';
<your parallel query goes here>
alter session set events '10384 trace name context off';
- 10384 이벤트에서 쿼리는 여전히 병렬 실행 계획을 가지고 있지만, 쿼리 코디네이터(QC)만 이 SQL 명령을 실행하고 병렬 슬레이브가 시작되지 않습니다.
- 따라서 1개의 프로세스만 실행되므로 실제 행과 같은 정보를 더 쉽게 수집할 수 있습니다.
- 다음 명령은 직렬실행계획(serial paln)을 만들고 병렬 실행 계획과 다르다.
alter session disable parallel query;
- 이 예시는 차이를 보여주기 위해 gather_plan_statistics 힌트를 사용
SQL> set linesize 150
SQL> set pagesize 2000
SQL> alter session set events '10384 trace name context forever , level 16384';
SQL> select /*+ gather_plan_statistics */ * from emp e;
SQL> select * from TABLE(dbms_xplan.display_cursor( null, null, 'ALL IOSTATS LAST'))
SQL> alter session set events '10384 trace name context off';
Here is the output with the event 16384
------------------------------------------------------------------------------------------
|Id|Operation |Name|Start|E-Row|E-Byte|Cost| TQ |IN-OU|PQ Distr |A-Row|Buffer|
------------------------------------------------------------------------------------------
| 1| PX COORDINATOR | | 1 | | | | | | | 14 | 9 |
| 2| PX SEND QC (RANDOM)|:TQ1| 1 | 14 | 518 | 2 |Q1,00|P->S |QC (RAND)| 14 | 9 |
| 3| PX BLOCK ITERATOR | | 1 | 14 | 518 | 2 |Q1,00|PCWC | | 14 | 9 |
|*4| TABLE ACCESS FULL|EMP | 1 | 14 | 518 | 2 |Q1,00|PCWP | | 14 | 9 |
------------------------------------------------------------------------------------------
and here is the output without the event 10384
------------------------------------------------------------------------------------------
|Id|Operation |Name|Start|E-Row|E-Byte|Cost| TQ |IN-OU|PQ Distr |A-Row|Buffer|
------------------------------------------------------------------------------------------
| 1| PX COORDINATOR | | 1 | | | | | | | 14 | 2 |
| 2| PX SEND QC (RANDOM)|:TQ1| 0 | 14 | 518 | 2 |Q1,00|P->S |QC (RAND)| 0 | 0 |
| 3| PX BLOCK ITERATOR | | 0 | 14 | 518 | 2 |Q1,00|PCWC | | 0 | 0 |
|*4| TABLE ACCESS FULL|EMP | 0 | 14 | 518 | 2 |Q1,00|PCWP | | 0 | 0 |
------------------------------------------------------------------------------------------
- 차이점은 2단계에서 4단계까지 볼 수 있는 이벤트가 없으면 A-Row 열이 숫자 0을 보여준다는 것입니다.
- /*+ gather_plan_statistics */ 힌트는 쿼리 코디네이터의 정보만 수집하고 병렬 슬레이브와 쿼리 코디네이터의 통계를 결합하지 않습니다.
- 2에서 4까지의 단계는 슬레이브에 의해 실행되며 쿼리 코디네이터가 작업을 수행하지 않습니다. 이것이 A-Row 열에 0이 보이는 이유입니다.
- 레벨 16384의 이벤트 10384를 사용하는 데 도움이 되며 QC만 작동하고 A-Rows 열은 실제 행 수를 보여줍니다.
- A-Time과 같은 일부 데이터는 이벤트 10384와 함께 병렬 실행과 직렬 실행 간에 변경될 수 있습니다.
- 즉, 이벤트가 각 행 단계에서 실제 행과 같은 더 쉬운 정보를 얻는 데 도움이 될 수 있다는 것을 의미한다.
- 근본적으로 나쁜 실행 계획이 아닌 느린 병렬 문제를 분석할 때 도움이 되지 않을 수 있습니다.
- 10046으로 세션 추적하기
- 이벤트 10046과 10384로 세션을 추적하면 다음을 해야 합니다:
alter session set events '10384 trace name context forever , level 16384';
alter session set events '10046 trace name context forever , level 8';
<your parallel query goes here>
alter session set events '10046 trace name context off';
alter session set events '10384 trace name context off';
- 힌트 /*+ gather_plan_statistics */의 경우와 같은 효과를 볼 수 있습니다. QC trace파일은 이벤트 10384 레벨 16384를 사용하지 않으면 슬레이브가 작업을 수행하는 행 소스에 대해 0을 보여줍니다.
- 이벤트 10384 레벨 16384를 사용하면 쿼리 코디네이터에서 1개의 추적 파일만 생성됩니다.