SQL> explain plan into sys.plan_table$ for select count(status) from big_table;
Explained.
SQL> select * from table(dbms_xplan.display('sys.plan_table$', null, null));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 599409829
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 6 | 35641 (1)| 00:07:08 |
| 1 | SORT AGGREGATE | | 1 | 6 | | |
| 2 | TABLE ACCESS FULL| BIG_TABLE | 9992K| 57M| 35641 (1)| 00:07:08 |
--------------------------------------------------------------------------------
SQL> alter table big_table parallel; --> 기본 병렬도 사용(필자가 선호하는 방식)
Table alerted.
SQL> select DEGREE from dba_tables where table_name = 'BIG_TABLE'
DEGREE
--------------------
DEFAULT
-----------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-----------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 6 | 4947 (1)| 00:01:00 | | | |
| 1 | SORT AGGREGATE | | 1 | 6 | | | | | |
| 2 | PX COORDINATOR | | | | | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | 6 | | | Q1,00 | P->S | QC (RAND) |
| 4 | SORT AGGREGATE | | 1 | 6 | | | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | | 9992K| 57M| 4947 (1)| 00:01:00 | Q1,00 | PCWC | |
| 6 | TABLE ACCESS FULL| BIG_TABLE | 9992K| 57M| 4947 (1)| 00:01:00 | Q1,00 | PCWP | |
-----------------------------------------------------------------------------------------------------------------
1cpu에서의 병렬실행
이론적으로 한 개의 CPU를 가진 장비에서도 병렬 쿼리의 효과를 볼 수 있다.
한 개의 CPU를 장착한 장비에서 하나의 명령이 CPU를 100% 사용한다고 확신할 수는 없다.
병렬 쿼리는 장비 상의 자원 최대한 활용할 수 있기 때문에 CPU를 100% 사용하게 할 수 있다.
하지만 한 개의 CPU를 가진 장비에서 두 개의 병렬쿼리를 동시에 수행하여 네 개의 세션이 발생했다면 아마도 응답 시간은 병렬 쿼리를 사용하지 않을 때보다 더 길어질 것이다. 한정된 자원을 확보하기 위한 프로세스가 많아질수록 모든 요청을 만족시키는 시간은 늘어날 것이기 때문이다
- 강좌 URL : http://www.gurubee.net/lecture/4065
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.