Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Gợi ý song song trong SQL động của Oracle có chạy song song không?

TLDR

Có lẽ hầu hết bạn đã quên bật DML song song.

ALTER SESSION ENABLE PARALLEL DML;

Thêm vào nếu bạn ép buộc thực hiện song song mà bạn thường không sử dụng song song gợi ý và ngược lại.

Thiết lập mẫu (11.2)

create table TAB_HIST (
col1 int,
col2 int,
col3 varchar2(4000))
PARTITION BY RANGE (col1) 
interval(1000000)
(
  partition p_init values less than (1000000) 
); 


create table TAB_SRC (
col1 int,
col2 int,
col3 varchar2(4000)
)
PARTITION BY RANGE (col1) 
interval(1000000)
(
  partition p_init values less than (1000000) 
);

insert into tab_src
select rownum, rownum,  rpad('x',1000,'y') from dual connect by level <= 100000;
commit;

Chèn

Bạn phải bật DML song song trong bước đầu tiên

ALTER SESSION ENABLE PARALLEL DML;

Lưu ý rằng có thể sử dụng gợi ý thay thế

INSERT /*+ ENABLE_PARALLEL_DML */ …

Ngoài ra, nếu bạn ép buộc DML và QUERY song song, bạn thường không sử dụng gợi ý song song . Tôi đang gợi ý chèn trực tiếp với APPEND thường được sử dụng trong tình huống này.

DECLARE
v_parallel_degree NUMBER := 2;
BEGIN
    EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DML PARALLEL ' || v_parallel_degree;
    EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL QUERY PARALLEL ' || v_parallel_degree;

    EXECUTE IMMEDIATE 'INSERT /*+ APPEND */ INTO TAB_HIST  
                SELECT  *
                FROM  TAB_SRC PARTITION(P_INIT)';
END;
/

Cách kiểm tra xem bảng có được chèn song song hay không? Cách đơn giản nhất là truy vấn bảng (trước khi thực hiện cam kết) - nếu bạn gặp lỗi dưới đây, đó là cách chèn trực tiếp song song.

select count(*) from TAB_HIST;
ORA-12838: cannot read/modify an object after modifying it in parallel

Chỉ mục

Nếu bạn chỉ định một mức độ song song trong create index tuyên bố bạn không cần bật hoặc lực lượng bất cứ thứ gì.

DECLARE
v_parallel_degree NUMBER := 2;
BEGIN
    
    EXECUTE IMMEDIATE 'CREATE UNIQUE INDEX idx_pk ON TAB_HIST
                 (COL1,COL2,COL3)
                 LOCAL
                 NOLOGGING PARALLEL ' || v_parallel_degree;
END;
/

Việc kiểm tra đơn giản như xem xét mức độ trong từ điển dữ liệu

select DEGREE from user_indexes where table_name = 'TAB_HIST';

DEGREE 
--------- 
2

Lưu ý rằng sau khi tạo chỉ mục ở chế độ song song, bạn thường muốn đặt lại DOP thành một. Nếu không, một số truy vấn vòng lặp lồng nhau đơn giản có thể bị nhầm lẫn và sẽ mở ra một truy vấn song song ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-12505, TNS:người nghe hiện không biết về SID được cung cấp trong kết nối des

  2. C # NHibernate &Oracle Managed Client

  3. 4 cách để định dạng một số không có số thập phân trong Oracle

  4. Cách sử dụng Chỉ mục ảo trong Cơ sở dữ liệu Oracle

  5. Bộ sưu tập Oracle trong mệnh đề where