Oracle 병렬 작업 의 병렬 조회 인 스 턴 스 분석

Oracle 데이터베이스 의 병행 작업 특성 은 본질 적 으로 데이터베이스 서버 의 남 은 자원(주로 CPU 자원)을 강제로 착취 하여 일부 고부 하 빅 데이터 양 데 이 터 를 분할 처리 하 는 것 이다.병행 작업 은 불확실 성 최적화 전략 으로 선택 할 때 조심해 야 한다.현재 병렬 작업 특성 을 사용 하 는 것 은 주로 다음 과 같은 몇 가지 가 있 습 니 다.
Parallel Query:병렬 조회,여러 운영 체제 등급 의 Server Process 를 사용 하여 SQL 조 회 를 동시에 완성 합 니 다.
Parallel DML:병렬 DML 작업.Parallel Query 와 유사 합 니 다.insert,update,delete 와 같은 빅 데이터 계량 표를 DML 로 조작 하려 면 사용 을 고려 할 수 있 습 니 다.
Parallel DDL:병렬 DDL 작업.예 를 들 어 대 용량 데이터 시트 구축,색인 rebuild 등 작업 을 한다.
Parallel Recovery,병행 복구.데이터베이스 인 스 턴 스 가 충돌 하여 다시 시작 하거나 저장 매체 가 복 구 될 때 병렬 복구 기술 을 시작 할 수 있 습 니 다.회복 시간 을 줄 이 는 목적 을 달성 할 수 있다.
Procedural Parallel,프로 세 스 코드 병행 화.우리 가 작성 한 코드 세 션,저장 과정 또는 함수 에 대해 실행 의 병행 화 를 실현 하여 실행 효율 을 가속 화 할 수 있 습 니 다.
 
1.병렬 쿼 리 조회
 
Oracle 데이터베이스 의 병행 조 회 는 비교적 기초적인 기술 이자 OLAP 와 Oracle Data Warehouse 가 자주 사용 하 는 병행 기술 이다.본 시리즈 앞에서 강조 한 요소 와 마찬가지 로 병행 기술 을 사용 하 는 것 을 확정 하기 전에 소프트 하드웨어 의 일부 선 결 조건 을 확정 해 야 한다.
 
작업 task 필요 조건.병렬 작업 을 준비 하 는 작업 task 는 큰 작업 이 어야 합 니 다.예 를 들 어 장시간 조회 등 입 니 다.작업 시간 은 보통 분,시간 으로 계산 할 수 있다.이런 임무 와 필요 만 이 병행 작업 방안 을 모험 적 으로 사용 할 수 있다.
자원 유 휴 조건.데이터베이스 서버 자원 이 유 휴 상태 일 때 만 병행 처 리 를 고려 할 수 있다.항상 바 쁘 면 섣 불리 사용 하고 병행 하면 자원 경쟁 이 심해 질 수 밖 에 없다.
병행 작업 의 가장 큰 위험 은 병행 경쟁 으로 인 한 효율 이 오 르 지 않 고 떨 어 지 는 것 이다.따라서 두 가지 전 제 를 확정 한 후에 병행 계획 처 리 를 해 야 한다.
2.환경 준비
우선 실험 환경 을 준비한다.필자 가 사용 하 는 일반 가정용 PC 가상 컴퓨터 이기 때문에 병행 도와 저장량 은 실제 조건 의 수 요 를 반영 하지 못 하 는 것 을 양해 해 주 십시오.

SQL> select * from v$version where rownum<2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
SQL> select count(*) from t;
 COUNT(*)
----------
1160704
 
11gR 2 서버 환경 을 선택 하면 데이터 시트 T 의 총 데 이 터 량 이 100 만 을 초과 합 니 다.
 
우선 병행 하지 않 는 실행 상황 을 살 펴 보 자.
 

//         ;
SQL> select sql_text, sql_id, version_count from v$sqlarea where sql_text like 'select count(*) from t%';
SQL_TEXT            SQL_ID    VERSION_COUNT
------------------------------ ------------- -------------
select count(*) from t     2jkn7rpsbj64t       2
SQL> select * from table(dbms_xplan.display_cursor('2jkn7rpsbj64t',format => 'advanced', cursor_child_no => 0));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 2jkn7rpsbj64t, child number 0
-------------------------------------
select count(*) from t
Plan hash value: 2966233522
-------------------------------------------------------------------
| Id | Operation     | Name | Rows | Cost (%CPU)| Time   |
-------------------------------------------------------------------
|  0 | SELECT STATEMENT  |   |    | 4464 (100)|     |
|  1 | SORT AGGREGATE  |   |   1 |      |     |
|  2 |  TABLE ACCESS FULL| T  | 1160K| 4464  (1)| 00:00:54 |
------------------------------------------------------------------- 
이 실행 계획 에는 병렬 기능 을 사용 하지 않 고 전체 표 스 캔 을 진행 합 니 다.실행 시간 은 54s 입 니 다.
 
3.병행 조회 계획
 
우선,우 리 는 상응하는 병행 도 를 설정한다.병렬 도 를 설정 하 는 데 는 두 가지 방식 이 있 습 니 다.하 나 는 hint 를 사용 하여 특정한 SQL 문 구 를 추가 하 는 것 입 니 다.다른 하 나 는 큰 대상 에 대해 병행 도 속성 을 설정 하 는 것 이다.
 
전자의 장점 은 일정한 강제 성과 목적 성 을 가지 고 있다 는 것 이다.특정 SQL 문 구 를 지정 하여 병행 처리 하 는 것 입 니 다.이러한 장점 은 병행 도 를 통제 하기 쉽 고 강 한 강제력 을 가 진 것 이 단점 이 며 데이터 양 이 적 을 때 사용 병행 우위 가 크 지 않다 는 것 이다.또 지 정 된 병행 도 를 나타 내 는 것 이 라면 이식 신축성 이 떨 어 지 는 단점 도 있다.
 
후 자 는 대상 의 속성 을 통 해 병행 도 를 지정 합 니 다.병행 을 실행 수단 으로 삼 아 최적화 기 에 선택 을 제공한다.이렇게 하면 CBO 는 시스템 에서 자원 의 상황 과 데이터 의 실제 상황 에 따라 실행 계획 을 생 성 한다.계획 중 에는 병행 일 수도 있 고 병행 이 아 닐 수도 있다.이러한 장점 은 병행 여 부 를 유 틸 리 티 CBO 에 맡 겨 판단 하 는 것 으로,병행 적 인 남용 위험 이 단점 이다.
 
여기 서 필 자 는 병렬 도 를 자동 으로 확정 하 는 방식 을 설정 합 니 다.
 

SQL> alter table t parallel;
Table altered
SQL> select count(*) from t;
 COUNT(*)
----------
1160704
조 회 를 시작 할 때 Oracle 의 병행 모 시 는 프로 세 스 풀 은 시스템 의 부하 와 실제 요소 에 따라 분 배 된 병행 프로 세 스 수 를 확정 합 니 다.이때,우 리 는 보기 v$px 를 통 해프로 세 스 풀 의 연결 정 보 를 보 려 면 process 를 사용 하 십시오. 

SQL> select * from v$px_process;
SERVER_NAME STATUS      PID SPID       SID  SERIAL#
----------- --------- ---------- ------------------------ ---------- ----------
P000    AVAILABLE     25 5776                
P001    AVAILABLE     26 5778 
병행 모 시 는 프로 세 스 는 특수 한 Server Process 로 본질 적 으로 공유 가능 한 slave 프로 세 스 입 니 다.전용 연결 모드 에서 일반적인 Server Process 와 Client Process 는'생사'의 관계 로 평생 클 라 이언 트 Process 에 서 비 스 를 제공 합 니 다.슬 레이 브 프로 세 스 를 모 시 는 것 은 프로 세 스 풀 을 통 해 관리 되 며 초기 화 를 시작 하면 일정 시간 시스템 에 머 물 러 다음 병행 처 리 를 기다 리 고 있 습 니 다.
 
이 때,우 리 는 v$process 보 기 를 검사 하고,대응 하 는 정 보 를 찾 을 수 있 습 니 다.

SQL> select * from v$process;
PID SPID     PNAME USERNAME      SERIAL# PROGRAM    
-------- ---------- ------------------------ ----- --------------- ---------- -------------------------------
25 5776      P000 oracle         13 oracle@oracle11g (P000)   
26 5778      P001 oracle          6 oracle@oracle11g (P001)   
(      ,    ……)
32 rows selected
대응 하 는 OS 에 도 실제 프로 세 스 가 존재 합 니 다.
 

[oracle@oracle11g ~]$ ps -ef | grep oracle
(      ,    ……)
oracle  5700   1 0 17:29 ?    00:00:02 oraclewilson (LOCAL=NO)
oracle  5723   1 0 17:33 ?    00:00:00 ora_smco_wilson
oracle  5764   1 2 17:40 ?    00:00:05 oraclewilson (LOCAL=NO)
oracle  5774   1 0 17:42 ?    00:00:00 oraclewilson (LOCAL=NO)
oracle  5776   1 0 17:43 ?    00:00:00 ora_p000_wilson
oracle  5778   1 0 17:43 ?    00:00:00 ora_p001_wilson
oracle  5820   1 1 17:44 ?    00:00:00 ora_w000_wilson
이 때 검색 이 끝 났 기 때문에,대응 하 는 병렬 세 션 정보 가 사라 져 보이 지 않 습 니 다.
 

SQL> select * from v$px_session;
SADDR      SID  SERIAL#   QCSID QCSERIAL# 
-------- ---------- ---------- ---------- ----------
단,작업 시간 이 길 면 해당 정 보 를 포착 할 수 있 습 니 다.
 
위의 상황 에서 볼 때,우리 가 병행 작업 을 실행 할 때,Oracle 은 모 시 는 프로 세 스 탱크 에서 대응 하 는 병행 프로 세 스 를 가 져 와 서 작업 을 진행 합 니 다.작업 이 완료 되면 프로 세 스 를 모 시 는 데 일정 시간 을 기 다 렸 다가 회수 합 니 다.
 
병행 작업 프로 세 스 의 자원 소모,v$pxsysstat 보기.
 

SQL> col statistic for a30;
SQL> select * from v$px_process_sysstat;
STATISTIC              VALUE
------------------------------ ----------
Servers In Use             0
Servers Available            0
Servers Started             2
Servers Shutdown            2
Servers Highwater            2
Servers Cleaned Up           0
Server Sessions             6
Memory Chunks Allocated         4
Memory Chunks Freed           0
Memory Chunks Current          4
Memory Chunks HWM            4
Buffers Allocated           30
Buffers Freed             30
Buffers Current             0
Buffers HWM               8
15 rows selected
 
다음은 실행 계획 정 보 를 확인 해 보 겠 습 니 다.
 

SQL> set pagesize 10000;
SQL> select * from table(dbms_xplan.display_cursor('2jkn7rpsbj64t',format => 'advanced',cursor_child
_no => 1));
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID 2jkn7rpsbj64t, child number 1
-------------------------------------
select count(*) from t
Plan hash value: 3126468333
----------------------------------------------------------------------------------------------------
| Id | Operation       | Name   | Rows | Cost (%CPU)| Time   |  TQ |IN-OUT| PQ Distrib
----------------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT    |     |    | 2478 (100)|     |    |   |      
|  1 | SORT AGGREGATE    |     |   1 |      |     |    |   |      
|  2 |  PX COORDINATOR    |     |    |      |     |    |   |      
|  3 |  PX SEND QC (RANDOM) | :TQ10000 |   1 |      |     | Q1,00 | P->S | QC (RAND) 
|  4 |   SORT AGGREGATE   |     |   1 |      |     | Q1,00 | PCWP |      
|  5 |   PX BLOCK ITERATOR |     | 1160K| 2478  (1)| 00:00:30 | Q1,00 | PCWC |      
|* 6 |    TABLE ACCESS FULL| T    | 1160K| 2478  (1)| 00:00:30 | Q1,00 | PCWP |      
----------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
6 - access(:Z>=:Z AND :Z<=:Z)
계획 을 실행 하 는 조건(6-access(:Z>=:Z AND:Z<=:Z)에서 우 리 는 임무 분 배 를 볼 수 있 고 그 다음 에 각각 전체 표 스 캔 을 할 수 있다.마지막 으로 count 를 정렬 하여 결 과 를 합 치 는 과정 입 니 다.
 
4.결론
 
Oracle Parallel Query 는 자주 사용 되 는 병행 조작 기술 이다.DDL,DML 등 유형 에 비해 병행 조 회 는 시스템 기능 의 한 단계 로 진행 할 수 있다.
 
병행 조 회 를 하 는 가장 큰 위험 은 병행 남용 과 통제 불 능 의 발생 이다.오 라 클 이 줄곧 애 써 해결 해 온 문제 이기 도 하 다.오 라 클 11gR 2 에는 Parallel Statement Queuing(PSQ)기술 특성 이 도입 됐다.일반적으로 병행 서버 가 허용 하면 Oracle 은 가능 한 한 많은 병행 프로 세 스 를 도입 하여 조작 합 니 다.PSQ 기술 의 등장 은 자원 측면 에서 병행 통 제 를 넣 은 것 이다.
 
시스템 이 바 쁠 때 PSQ 는 병행 작업 을 대기 상태 에 들 어가 병행 환경의 악 화 를 방지한다.환경 이 좋아 지면 대기 열의 병렬 문 구 는 실행 상태 로 들어간다.이 특성 은 병행 남용 의 발생 을 효과적으로 방지 할 수 있다.

좋은 웹페이지 즐겨찾기