Oracle 병렬 작업 의 병렬 조회 인 스 턴 스 분석
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 는 병행 작업 을 대기 상태 에 들 어가 병행 환경의 악 화 를 방지한다.환경 이 좋아 지면 대기 열의 병렬 문 구 는 실행 상태 로 들어간다.이 특성 은 병행 남용 의 발생 을 효과적으로 방지 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Oracle 생성 향후 3일간의 전체 시점 (단계 상세)수요: X 좌표축 시간은 모두 정시 시간으로 앞으로 3일 동안의 예측을 보여준다(x 축은 앞으로 3일 동안의 정시 시간을 보여준다), 3시간마다 한 눈금, 가로 좌표는 모두 24개의 눈금을 보여준다 1단계: 현재 시...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.