mysql提高并行并行_oracle 并行之并行度篇
操作內(nèi)并行使用的slave process數(shù)量就是并行度dop,indextable都有dop 作為默認(rèn)操作并行度default 1表示不使用并行處理 SQL create table t1 (a int) parallel 6; Table created. SQL select degree from user_tables where table_name=’T1′; DEGREE ——
操作內(nèi)并行使用的slave process數(shù)量就是并行度dop,index&table都有dop 作為默認(rèn)操作并行度default 1表示不使用并行處理
SQL> create table t1 (a int) parallel 6;
Table created.
SQL> select degree from user_tables where table_name=’T1′;
DEGREE
———-
6
SQL> alter table t1 parallel 3;
Table altered.
SQL> select degree from user_tables where table_name=’T1′;
DEGREE
———-
3
*禁用alter table(index) parallel 1 (noprallel)
#create 時(shí)候使用parallel不僅會(huì)在創(chuàng)建table&index時(shí)使,后續(xù)的操作ddl,dml也會(huì)使用(如果只想建表時(shí)使用,建好后修改)
SQL> create table t2 (a int) parallel;(未指定并行度)
Table created.
SQL> select degree from user_tables where table_name=’T2′;
DEGREE
———-
DEFAULT ~~~這樣使用default并行度=(cpu_count*parallel_threads_per_cpu)
SQL> show parameter cpu_count
NAME TYPE VALUE
———————————— ———– ——————————
cpu_count integer 2
SQL> show parameter parallel_thread
NAME TYPE VALUE
———————————— ———– ——————————
parallel_threads_per_cpu integer 2
SQL>
SQL> insert into t2 values (1);
1 row created.
SQL> commit;
Commit complete.
SQL> set autotrace trace exp
SQL> select * from t2;
Execution Plan
———————————————————-
Plan hash value: 1216610266
——————————————————————————–
——————————
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
| TQ |IN-OUT| PQ Distrib |
——————————————————————————–
——————————
| 0 | SELECT STATEMENT | | 1 | 13 | 2 (0)| 00:00:01
| | | |
| 1 | PX COORDINATOR | | | | |
| | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 1 | 13 | 2 (0)| 00:00:01
| Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 1 | 13 | 2 (0)| 00:00:01
| Q1,00 | PCWC | |
| 4 | TABLE ACCESS FULL| T2 | 1 | 13 | 2 (0)| 00:00:01
| Q1,00 | PCWP | |
——————————————————————————–
——————————
Note
—–
– dynamic sampling used for this statement
SQL>
SQL> set autotrace off
SQL> select process from v$pq_tqstat;
no rows selected
可以看到 用set autotrace 后 查v$pq_tqstat norows ,這是2個(gè)原因造成的
1.set autotrace的原理
開啟autotrace時(shí)候 一個(gè)process對(duì)應(yīng) 2個(gè) session
通常情況下是一個(gè) session對(duì)應(yīng)一個(gè) server processs,但SErVER PORCESSS 可以對(duì)應(yīng)多個(gè)session
SQL> conn xh/a831115
已連接。
SQL> select distinct sid from v$mystat;
SID
———-
144
SQL> select username, sid, serial#, server, paddr, status from v$session where s
id=144;
USERNAME SID SERIAL# SERVER PADDR STATUS
—————————— ———- ———- ——— ——– ——–
XH 144 27 DEDICATED 20E4CC3C INACTIVE
SQL> select program ,addr from v$process where addr=(select paddr from v$session
where sid=144);
PROGRAM ADDR
—————————————————————- ——–
ORACLE.EXE (SHAD) 20E4CC3C
SQL> select sid from v$session where paddr=’20E4CC3C’;
SID
———-
144
SQL> set autotrace on
SQL> select sid from v$session where paddr=’20E4CC3C’;
SID
———-
144
154
2.v$pq_tqstat只提供當(dāng)前session最后一次并行執(zhí)行sql語句的信息
綜合2點(diǎn)可以看出set autotrace 最后一個(gè)session 是 執(zhí)行計(jì)劃的,所以v$pq_tqstat為no rows
所以 直接執(zhí)行
SQL> select * from t2;
A
———-
1
SQL> SELECT dfo_number, tq_id, server_type, process, num_rows, bytes
2 FROM v$pq_tqstat
3 ORDER BY dfo_number, tq_id, server_type DESC, process;
DFO_NUMBER TQ_ID SERVER_TYP PROCESS NUM_ROWS BYTES
———- ———- ———- ———- ———- ———-
1 0 Producer P000 1 24
1 0 Producer P001 0 20
1 0 Producer P002 0 20
1 0 Producer P003 0 20
1 0 Consumer QC 1 84
可以看到啟動(dòng)了4個(gè)slave process,這4個(gè)process=cpu_count*parallel_threads_per_cpu(2*2)
相關(guān)的hint:
parallel(10g,11g),no_parallel(10g,11g),parallel_index(10g,11g,9i),no_parallel_index(10g,11g)
noparallel(9i),noparallel_index(9i)
##需要知道并行hint只是告訴優(yōu)化器可以使用并行,但不是強(qiáng)制使用并行一切還是從cost出發(fā)(重點(diǎn))
declare
begin
for i in 1..1000 loop
insert into t2 values(i);
end loop;
commit;
end;
SQL> explain plan set statement_id=’t2_pp’ for select /*+parallel(t2 2)*/* from t2 where a>900;
Explained.
SQL> create index t2_id on t2 (a);
Index created.
SQL> explain plan set statement_id=’t2_id’ for select /*+parallel(t2 2)*/* from t2 where a>900;
Explained.
SQL> set linesize 1000
SQL> select * from table (dbms_xplan.display(null,’t2_pp’));
PLAN_TABLE_OUTPUT
————————————————————————————————————————————————————————————————————————————————————————————————————
Plan hash value: 1216610266
————————————————————————————————————–
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
————————————————————————————————————–
| 0 | SELECT STATEMENT | | 100 | 1300 | 2 (0)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 100 | 1300 | 2 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 100 | 1300 | 2 (0)| 00:00:01 | Q1,00 | PCWC | |
|* 4 | TABLE ACCESS FULL| T2 | 100 | 1300 | 2 (0)| 00:00:01 | Q1,00 | PCWP | |
————————————————————————————————————–
PLAN_TABLE_OUTPUT
————————————————————————————————————————————————————————————————————————————————————————————————————
Predicate Information (identified by operation id):
—————————————————
4 – filter(“A”>900)
Note
—–
– dynamic sampling used for this statement
20 rows selected.
SQL> select * from table (dbms_xplan.display(null,’t2_id’));
PLAN_TABLE_OUTPUT
————————————————————————————————————————————————————————————————————————————————————————————————————
Plan hash value: 523330294
————————————————————————–
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
————————————————————————–
| 0 | SELECT STATEMENT | | 100 | 1300 | 2 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| T2_ID | 100 | 1300 | 2 (0)| 00:00:01 |
————————————————————————–
Predicate Information (identified by operation id):
—————————————————
PLAN_TABLE_OUTPUT
————————————————————————————————————————————————————————————————————————————————————————————————————
1 – access(“A”>900)
Note
—–
– dynamic sampling used for this statement
17 rows selected.
可以看到 即使在使用并行與走index時(shí)cost一樣時(shí)候還是選擇了走index(cost表面一樣,若使用trace alter session set events ’10053 trace name context forever’;看的更詳細(xì),并行cpu cost要高些,所以選擇了走index,所以hint parallel,parallel_index只是告訴query optimizer
可以考慮并行 不是強(qiáng)制使用)
本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請(qǐng)注明出處,感謝您的尊重!
總結(jié)
以上是生活随笔為你收集整理的mysql提高并行并行_oracle 并行之并行度篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql session大小写_mys
- 下一篇: python设计问答器_Python文件