đọc và viết song song không phải lúc nào ràng buộc với nhau.
alter session disable parallel dml;
chỉ vô hiệu hóa song song cho phần WRITE của câu lệnh. Phần READ có thể vẫn chạy song song. Vì đây là thao tác MERGE
, gợi ý song song yêu cầu cả đọc và viết song song. Ngoài ra, một gợi ý song song ghi đè alter session disable parallel query;
, mặc dù nó không ghi đè alter session disable parallel dml;
.
Số lượng máy chủ song song sẽ gấp hai lần mức độ yêu cầu song song để hỗ trợ producer and consumer operations, nhằm tận dụng tối đa tính tương đương giữa các hoạt động. Các truy vấn nhóm hoặc đặt hàng các kết quả sẽ sử dụng gấp đôi số lượng chủ đề. Trong một số trường hợp, điều này có thể xảy ra ngay cả khi không có rõ ràng GROUP BY
hoặc ORDER BY
vì một số hoạt động có thể yêu cầu sắp xếp một cách ngầm định.
bảng mẫu
create table bigtable_1(key number, value1 number);
create table bigtable_2(key number, value1 number);
Parallel đọc và viết
Lưu ý PX COORDINATOR
cho hoạt động # 1. Khi bước đó ở trên các MERGE
nó có nghĩa là việc viết được thực hiện song song.
rollback;
alter session enable parallel dml;
alter session enable parallel query;
explain plan for merge /*+ parallel(a,8) */ into bigtable_1 a using bigtable_2 b
on (a.key = b.key) when matched then update set a.value1 = b.value1;
select * from table(dbms_xplan.display(format => 'basic'));
Plan hash value: 827272579
------------------------------------------------------
| Id | Operation | Name |
------------------------------------------------------
| 0 | MERGE STATEMENT | |
| 1 | PX COORDINATOR | | <-- PARALLEL WRITE
| 2 | PX SEND QC (RANDOM) | :TQ10003 |
| 3 | MERGE | BIGTABLE_1 |
| 4 | PX RECEIVE | | <-- PARALLEL READ
| 5 | PX SEND HYBRID (ROWID PKEY)| :TQ10002 |
| 6 | VIEW | |
| 7 | HASH JOIN BUFFERED | |
| 8 | BUFFER SORT | |
| 9 | PX RECEIVE | |
| 10 | PX SEND HASH | :TQ10000 |
| 11 | TABLE ACCESS FULL | BIGTABLE_2 |
| 12 | PX RECEIVE | |
| 13 | PX SEND HASH | :TQ10001 |
| 14 | PX BLOCK ITERATOR | |
| 15 | TABLE ACCESS FULL | BIGTABLE_1 |
------------------------------------------------------
nối tiếp ghi, song song đọc
Bây giờ hoạt động MERGE
là trên hết PX ...
hoạt động. Việc ghi được thực hiện một cách serially, nhưng việc đọc vẫn được thực hiện song song.
rollback;
alter session disable parallel dml;
alter session disable parallel query;
explain plan for merge /*+ parallel(a,8) */ into bigtable_1 a using bigtable_2 b
on (a.key = b.key) when matched then update set a.value1 = b.value1;
select * from table(dbms_xplan.display(format => 'basic'));
Plan hash value: 1648019208
------------------------------------------------
| Id | Operation | Name |
------------------------------------------------
| 0 | MERGE STATEMENT | |
| 1 | MERGE | BIGTABLE_1 | <-- SERIAL WRITE
| 2 | PX COORDINATOR | | <-- PARALLEL READ
| 3 | PX SEND QC (RANDOM) | :TQ10002 |
| 4 | VIEW | |
| 5 | HASH JOIN BUFFERED | |
| 6 | BUFFER SORT | |
| 7 | PX RECEIVE | |
| 8 | PX SEND HASH | :TQ10000 |
| 9 | TABLE ACCESS FULL| BIGTABLE_2 |
| 10 | PX RECEIVE | |
| 11 | PX SEND HASH | :TQ10001 |
| 12 | PX BLOCK ITERATOR | |
| 13 | TABLE ACCESS FULL| BIGTABLE_1 |
------------------------------------------------
Nguồn
2014-11-15 00:01:31
Cảm ơn bạn đã trả lời tuyệt vời @jon Heller. – touchchandra
Hơn nữa, Chỉ muốn rõ ràng trong một điều nữa. Cấu hình nào bạn đề nghị, case-1) vô hiệu hóa DML và sử dụng Parallel (a, 8) hoặc case-2) kích hoạt DML và sử dụng Parallel (a, 4). Chỉ để đảm bảo rằng tổng số phiên vẫn còn 8. – touchchandra
Tôi khuyên bạn nên sử dụng '/ * + parallel (8) * /'. Điều đó sử dụng tính song song mức tuyên bố thay vì cấp đối tượng. Bằng cách đó bạn không phải lo lắng về việc chỉ định từng bí danh riêng biệt. Và tôi sẽ hướng tới DOP là 8, không phải một số máy chủ song song của 8. Số cuối cùng có thể kết thúc là 16, nhưng một nửa số chủ đề đó sẽ chỉ ngồi đó để nhận dữ liệu và không thực sự tất cả "đang hoạt động" tại cùng một lúc. –