행위

병렬 쿼리 모니터링

DB CAFE

1 병렬 실행 성능 모니터링

병렬 실행 성능 문제를 진단 할 때 다음 유형의 모니터링 수행

  1. 동적 성능 뷰를 사용하여 병렬 실행 성능 모니터링
  2. 세션 통계 모니터링
  3. 시스템 통계 모니터링
  4. 운영 체제 통계 모니터링
    1. 다이나믹 퍼퍼먼스 뷰를 사용하여 병렬 실행 성능 모니터링

Oracle Database 실시간 모니터링 기능을 통해 실행중인

1.1 SQL 문의 성능 모니터링

SQL 모니터링은 SQL 문이 병렬로 실행될 때 또는 단일 실행을 위해 최소 5 초의 CPU 또는 I / O 시간을 소비 할 때 자동 시작.

자세한 내용은 Oracle Database Performance Tuning Guide 를 참조

며칠 동안 시스템을 실행 한 후에는 병렬 실행 성능 통계를 모니터하여 병렬 처리가 최적인지 여부를 판별.

1.2 V$PX_BUFFER_ADVICE

: V$PX_BUFFER_ADVICE뷰는 모든 병렬 쿼리에 대한 히스토리 및 예상 최대 버퍼 사용량에 대한 통계를 제공

병렬 쿼리의 메모리 부족 문제에 대한 응답으로 이 뷰를 참조하여 SGA크기 재구성

1.3 V$PX_SESSION

: V$PX_SESSION 뷰는 쿼리 서버 세션, 그룹, 세트 및 서버 번호에 대한 데이터를 보여줌 

또한 병렬 실행을 위해 작업하는 프로세스에 대한 실시간 데이터를 표시.

  이 테이블에는 요청 된 병렬 처리 수준 (DOP) 및 작업에 부여 된 실제 DOP에 대한 정보가 포함됩니다.

1.4 V$PX_SESSTAT

: V$PX_SESSTAT뷰는에서 보낸 세션 정보 V$PX_SESSION와 V$SESSTAT테이블 의 조인을 제공 합니다. 
  표준 세션에서 사용 가능한 모든 세션 통계는 병렬 실행을 사용하여 수행되는 모든 세션에서 사용할 수 있습니다.

1.5 V$PX_PROCESS

  V$PX_PROCESS 뷰 상태, 세션 ID, 프로세스 ID, 및 기타 정보를 포함하는 병렬 프로세스에 대한 정보를 포함한다.

1.6 V$PX_PROCESS_SYSSTAT

  V$PX_PROCESS_SYSSTAT뷰는 쿼리 서버의 상태를 보여주고 버퍼 할당 통계를 제공합니다.

1.7 V$PQ_SESSTAT

  1. V$PQ_SESSTAT뷰는 쿼리 프로세스를 할당하는 방법과 다중 사용자 및 로드 밸런싱 알고리즘 기본 및 암시 값에 영향을 미치는 방법에 대한 데이터와 시스템의 모든 현재 서버 그룹의 상태를 보여줍니다.
  2. 이러한 보기의 데이터를 검토 한 후 성능을 향상 시키려면 일부 매개 변수 설정을 조정해야 할 수도 있습니다.
  3. 이 경우, "병렬 실행을위한 일반 매개 변수 조정" 에 대한 설명을 참조하십시오 .
  4. 이보기를 주기적으로 조회하여 장기 실행 병렬 조작의 진행을 모니터하십시오.
  1. 많은 다이나믹 퍼퍼먼스 뷰의 경우, Oracle Database가 각 뷰에 대한 통계를 수집하기 위해 매개 변수 를 설정해야합니다 * or 문을 사용하여 설정 및 해제 할 수 있습니다
  • TIMED_STATISTICSTRUEALTER SYSTEMALTER SESSIONTIMED_STATISTICS

1.8 V$PQ_TQSTAT

  1. 간단한 예로서 두 개의 테이블 사이의 해시 조인을 고려 하세요
  2. 기껏해야 이 해시 함수는 병렬 실행 서버 A와 병렬 실행 서버 B에 대해 하나의 해시 값을가집니다.
  3. 2개 DOP는 괜찮지 만 4개가 있으면 2개 이상의 병렬 실행 서버에 작업이 없습니다.
  4. 이러한 유형의 문제를 찾으려면
SELECT dfo_number, tq_id, server_type, process, num_rows
  FROM V$PQ_TQSTAT 
 ORDER BY dfo_number DESC, tq_id, server_type, process;
  1. 이 문제를 해결하는 가장 좋은 방법은 다른 조인 방법을 선택하는 것입니다.
  2. 중첩 루프 조인이 최상의 옵션 일 수 있습니다.
  3. 또는 한 조인 테이블이 다른 조인 테이블보다 작은 BROADCAST경우 힌트를 사용하여 분산 방법을 PQ_DISTRIBUTE 힌트 할 수 있습니다 .
  4. 옵티마이져는 BROADCAST 분산을 고려 하지만 OPTIMIZER_FEATURES_ENABLE9.0.2 이상으로 설정 해야합니다 .
  5. 이제 카디널리티가 높은 조인 키가 있지만 한 값에는 대부분의 데이터가 포함되어 있다고 가정합니다

(예 : 용암 램프 판매량). 큰 판매량을 기록한 유일한 해는 1968 년이었고 1968 년 기록을위한 병렬 실행 서버는 압도적입니다. 이전 단락에서 설명한 것과 동일한 수정 조치를 사용해야합니다.

  1. V$PQ_TQSTAT 는 테이블 큐 수준에서 메시지 트래픽에 대한 자세한 보고서를 제공합니다.
  2. V$PQ_TQSTAT 데이터는 병렬 SQL 문을 실행중인 세션에서 쿼리 할 때만 유효합니다.
  3. 에이테이블 큐는 쿼리 서버 그룹 간, 병렬 실행 코디네이터와 쿼리 서버 그룹 간 또는 쿼리 서버 그룹과 코디네이터 간의 파이프 라인입니다.
  4. 테이블 대기열은 작업 열에서 PX SEND <partitioning type>(예 PX SEND HASH:)와 (와)에 의해 명시 적으로 표시됩니다
  5. PX RECEIVE. 이전 버전과의 호환성을 위해 행 레이블은 PARALLEL_TO_PARALLEL, SERIAL_TO_PARALLEL또는 PARALLEL_TO_SERIAL이전 릴리스와

동일한 의미를 계속 가지며 이전처럼 테이블 대기열 할당을 추론 할 수 있습니다. 또한 병렬 실행 계획의 맨 위에는 작동중인 새 노드가 표시됩니다 PX COORDINATOR.

  1. V$PQ_TQSTAT 각 테이블 큐에서 읽거나 쓰는 각 쿼리 서버 프로세스에 대한 행이 있습니다.
  2. 10 개의 소비자 프로세스를 10 개의 생산자 프로세스에 연결하는 테이블 대기열에는 뷰에 20 개의 행이 있습니다.
  3. TQ_ID각 테이블 큐를 통해 전송 된 총 바이트 수를 얻기 위해 바이트 열과 그룹을 합계 한 테이블 큐 식별자를 합산합니다.

이를 옵티 마이저 추정과 비교하십시오.

  1. 큰 변동은 더 큰 표본을 사용하여 데이터를 분석 할 필요성을 나타냅니다.
  2. 큰 분산을 조사하여 생산자가 불균등 한 데이터 배포로 시작하는지 또는 배포 자체가 왜곡되는지 여부를 결정해야합니다.
  3. 데이터 자체가 왜곡 된 경우 카디널리티가 낮거나 고유 값 수가 적을 수 있습니다.

1.9 V$RSRC_CONS_GROUP_HISTORY

V$RSRC_CONS_GROUP_HISTORY보기에서 각 항목에 대해 소비자 그룹 통계의 역사를 표시 V$RSRC_PLAN_HISTORY하는 병렬 문 대기열에 대한 정보를 포함 NULL이 아닌 계획을 가지고 있다.

1.10 V$RSRC_CONSUMER_GROUP

이 V$RSRC_CONSUMER_GROUP보기에는 병렬 명령문에 대한 정보를 포함하여 현재 활성 자원 소비자 그룹과 관련된 데이터가 표시됩니다.

1.11 V$RSRC_PLAN

V$RSRC_PLAN보기는 병렬 문 대기열의 상태를 포함하여 현재 활성화 된 모든 자원 계획의 이름을 표시합니다.

1.12 V$RSRC_PLAN_HISTORY

V$RSRC_PLAN_HISTORY표시 자원 계획이 활성화되었을 때, 장애인, 또는 인스턴스에서 수정의 역사. 이력에는 병렬 명령문 대기 상태가 포함됩니다

1.13 V$RSRC_SESSION_INFO

이 V$RSRC_SESSION_INFO보기는 병렬 명령문 큐 통계를 포함하여 세션 당 자원 관리자 통계를 표시합니다.

1.14 세션 통계 모니터링

이 예는 : 동적 성능보기로 병렬 실행 성능 모니터링;에 설명 된 동적 성능보기를 사용합니다 .

GV$PX_SESSION병렬로 실행되는 서버 그룹의 구성을 판별하는 데 사용하십시오 . 이 예제에서 세션 9는 쿼리 코디네이터이고 세션 7과 21은 첫 번째 그룹 인 첫 번째 그룹에 있습니다. 세션 18과 20은 첫 번째 그룹, 두 번째 세션에 있습니다. 이 쿼리에 대해 요청되고 부여 된 DOP는 다음 쿼리의 출력에 표시된대로 2입니다.

SELECT QCSID, SID, INST_ID "Inst", SERVER_GROUP "그룹", SERVER_SET "설정",
  학위 "학위", REQ_DEGREE "요구 학위"
GV$PX_SESSION ORDER BY QCSID, QCINST_ID, SERVER_GROUP, SERVER_SET;

출력 결과는 다음과 유사해야합니다.

QCSID SID Inst Group 세트 학위 요건


---------- ---------- ---------- ---------- ---------- ----------

        9 9 1 
        9 7 1 1 1 2 2 
        9 21 1 1 1 2 2 
        9 18 1 1 2 2 2 
        9 20 1 1 2 2 2 

단일 인스턴스의 SELECT FROM V$PX_SESSION경우 열 이름을 사용 하고 포함하지 마십시오 Instance ID.

GV$PX_SESSION동일한 작업을 완료하기 위해 공동 작업을 사용하여 이전 예의 출력에 표시된 프로세스 . 다음 예는 실제 읽기와 관련하여 이러한 프로세스의 진행을 판별하기 위해 조인 조회를 실행하는 것을 보여줍니다. 이 쿼리를 사용하여 특정 통계를 추적하십시오.

SELECT QCSID, SID, INST_ID "Inst", SERVER_GROUP "그룹", SERVER_SET "설정",
  NAME "통계 이름", VALUE
GV $ PX_SESSTAT A, V $ STATNAME B부터
A.STATISTIC # = B. B. '물리적 인 읽기'와 같은 이름과 이름
  AND VALUE> 0 ORDER BY QCSID, QCINST_ID, SERVER_GROUP, SERVER_SET;

출력 결과는 다음과 유사해야합니다.

QCSID SID Inst Group Set 통계 이름 VALUE


----- ------ ------ ------ ------------------ --- -------

    9 9 1 물리적 읽기 3863 
    9 7 1 1 1 물리적 읽기 2 
    9 21 1 1 1 물리적 읽기 2 
    9 18 1 1 2 물리적 읽기 2 
    9 20 1 1 2 물리적 읽기 2 

통계를 추적하려면 이전 유형의 쿼리를 사용하십시오 V$STATNAME. 쿼리 서버 프로세스의 진행 상태를 관찰하는 데 필요한만큼 자주이 쿼리를 반복하십시오.

다음 쿼리는 V$PX_PROCESS쿼리 서버의 상태를 확인하는 데 사용 됩니다.

SELECT * FROM V $ PX_PROCESS;

출력 결과는 다음과 유사해야합니다.

SERV STATUS PID SPID SID SERIAL


--------- ------ --------- ------ ------

P002 IN USE 16 16955 21 7729 P003 IN USE 17 16957 20 2921 P004 이용 가능 18 16959 P005 사용 가능 19 16962 P000 IN USE 12 6999 18 4720 P001 IN USE 13 7004 7 234 시스템 통계 모니터링 V$SYSSTAT및 V$SESSTAT뷰 병렬 실행을 모니터링하기위한 여러 통계를 포함한다. 이 통계를 사용하여 병렬 쿼리, DML, DDL, 데이터 흐름 연산자 (DFO) 및 연산 수를 추적합니다. 각 쿼리, DML 또는 DDL은 여러 개의 병렬 작업과 여러 DFO를 가질 수 있습니다.

또한 통계는 적응 형 다중 사용자 알고리즘 또는 사용 가능한 병렬 실행 서버의 고갈로 인해 DOP가 감소되거나 다운 그레이드 된 쿼리 작업 수를 계산합니다.

마지막으로 이러한 뷰의 통계는 병렬 실행을 위해 보내지는 메시지 수를 계산합니다. 다음 구문은 이러한 통계를 표시하는 방법의 예입니다.

이름 선택, GV $ SYSSTAT에서의 값 '상위 작업 이름 %'와 (과) 같은 '% PARALLEL OPERATIONS %' 또는 상위 (이름)와 같은 '% 병렬'또는 상위 (이름)와 같은 '% PX %'; 출력 결과는 다음과 유사해야합니다.

이름 값


----------

병렬화 된 쿼리 347 병렬화 된 DML 문 0 병렬화 된 DDL 문 0 DFO 나무가 병렬화 됨 463 병렬 작업이 다운 그레이드되지 않음 28 병렬 작업이 직렬 31로 다운 그레이드되었습니다. 병렬 작업은 75에서 99로 낮추어졌다. 252 병렬 작업이 50에서 75 pct로 다운 그레이드 128 병렬 운영이 25에서 50으로 낮아짐 43 병렬 작업이 1에서 25 %로 다운 그레이드 12 PX 로컬 메시지가 74548을 보냈습니다. PX 로컬 메시지 recv'd 74128 PX 원격 메시지가 0으로 전송되었습니다. PX 원격 메시지 recv'd 0 다음 쿼리는 시스템에서 각 슬레이브 (하위 프로세스) 및 쿼리 코디네이터 프로세스의 현재 대기 상태를 보여줍니다.

SELECT px.SID "SID", p.PID, p.SPID "SPID", px.INST_ID "Inst",
       px.SERVER_GROUP "그룹", px.SERVER_SET "설정",
       px.DEGREE "Degree", px.REQ_DEGREE "Req Degree", w.event "Wait Event"
GV $ SESSION s, GV $ PX_SESSION px, GV $ PROCESS p, GV $ SESSION_WAIT w
WHERE s.sid (+) = px.sid AND s.inst_id (+) = px.inst_id AND
      s.sid = w.sid (+) AND s.inst_id = w.inst_id (+) AND
      s.paddr = p.addr (+) AND s.inst_id = p.inst_id (+)
ORDER BY DECODE (px.QCINST_ID, NULL, px.INST_ID, px.QCINST_ID), px.QCSID, 
DECODE (px.SERVER_GROUP, NULL, 0, px.SERVER_GROUP), px.SERVER_SET, px.INST_ID;

1.15 운영 체제 통계 모니터링

오라클 데이터베이스 및 정보를 사용할 수 (예 :하지만 운영 시스템 유틸리티에서 사용할 수있는 정보 사이에 상당한 중복이 sar및 vmstatUNIX 기반 시스템)가. 운영 체제는 I / O, 통신, CPU, 메모리 및 페이징, 스케줄링 및 동기화 프리미티브에 대한 성능 통계를 제공합니다. 그만큼V$SESSTAT 보기는 운영 체제의 주요 범주를 제공합니다. 통계뿐.

일반적으로 I / O 장치 및 세마포어 작업에 대한 운영 체제 정보는 Oracle Database 정보보다 데이터베이스 개체 및 작업에 다시 매핑하기가 어렵습니다. 그러나 일부 운영 체제에는 우수한 시각화 도구와 효율적인 데이터 수집 방법이 있습니다.

CPU 및 메모리 사용에 대한 운영 체제 정보는 성능을 평가하는 데 매우 중요합니다. 아마도 가장 중요한 통계는 CPU 사용량입니다. 저수준 성능 조정의 목표는 모든 CPU에서 CPU 바운드가되는 것입니다. 이 작업이 완료되면 SQL 수준에서 작업하여 I / O 집약적이지만 CPU 사용량이 적은 대체 계획을 찾을 수 있습니다.

운영 체제 메모리 및 페이징 정보는 병렬 통신, 정렬 및 해시 조인과 같은 메모리 집약적 인 데이터웨어 하우스 하위 시스템에서 메모리를 나누는 방법을 제어하는 ​​많은 시스템 매개 변수를 미세 조정할 때 유용합니다.