Tại bài viết này, các bạn sẽ biết được một kỹ thuật để tăng tốc câu lệnh SQL Insert: Sử dụng HINT INSERT APPEND. Đây là giải pháp được áp dụng khá nhiều trong các dự án mà Wecommit thực hiện tối ưu cho khách hàng. Các bạn có thể xem danh sách khách hàng và dự án của chúng tôi tại đây.
1. Insert Append là gì ?
Đây là một trong các kỹ thuật sử dụng HINT khi tối ưu câu lệnh SQL.
Để hiểu hơn về HINT, bạn có thể đọc một bài viết khác của tôi tại đây:
Khi sử dụng APPEND, dữ liệu sẽ được thêm vào đằng sau High Water Mark của Table, việc này giúp giảm đáng kể thời gian thực hiện Insert.
Nếu bạn chưa biết về High Water Mark (HWM) và các vấn đề về hiệu năng liên quan đến HWM, bạn có thể đọc một bài viết khác của tôi:
2. Sử dụng Insert Append như thế nào?
Cách sử dụng Insert Append rất đơn giản, bạn chỉ cần thêm HINT /*+ APPEND */ vào sau câu lệnh INSERT.
Ví dụ như sau:
Câu lệnh Insert thông thường anh em sẽ sử dụng như sau:
insert into test_insert select * from employees
Bây giờ muốn tăng tốc, anh em sử dụng Insert Append bằng cách bên dưới:
insert /*+ APPEND*/ into test_insert select * from employees
Lưu ý: /*+ APPEND*/ không phải là comment, đây là HINT nhé anh em.
3. Chiến lược thực thi của câu lệnh sẽ thế nào khi chúng ta thực hiện INSERT APPEND?
Tôi sẽ thực hiện phân tích 2 chiến lược thực thi của câu lệnh Insert trước và sau khi sử dụng APPEND
TH1: Sử dụng Insert thông thường
insert into test_insert select * from employees
TH2: Sử dụng Insert Append
insert /*+ APPEND*/ into test_insert select * from employees
Sự khác nhau trong 2 chiến lược thực thi trên là gì?
- Nếu chỉ đánh giá về COST, 2 câu lệnh có chi phí thực thi ước tính tương đương nhau (đều là 2K).
- Sự khác biệt ở nội dung chi tiết của công việc thực hiện:
- Chiến lược thực thi thứ nhất sử dụng LOAD TABLE CONVENTIONAL
- Chiến lược thực thi thứ hai sử dụng LOAD AS SELECT (Đây là chiến lược sử dụng APPEND)
4. Nếu Cost của chiến lược thực thi tương tự nhau, câu lệnh INSERT APPEND sẽ cải thiện hiệu năng như thế nào?
Khi đánh giá hiệu năng của một câu lệnh, dựa vào Cost của chiến lược thực thi chỉ là một trong các yếu tố để đánh giá.
Dưới đây tôi sẽ thực hiện đánh giá chi tiết dựa trên các chỉ số khác nữa, để anh em có thể thấy rõ hiệu năng của 2 câu lệnh sẽ khác biệt ở đâu nhé
4.1. Đánh giá hiệu năng câu lệnh Insert thông thường (Conventional Insert)
SQL> insert into test_insert select * from employees;
1100016 rows created.
Statistics
----------------------------------------------------------
72 recursive calls
62058 db block gets
20713 consistent gets
2 physical reads
58102916 redo size
840 bytes sent via SQL*Net to client
806 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1100016 rows processed
4.2. Đánh giá hiệu năng câu lệnh Insert Append
Trước khi Test, thực hiện truncate table để đảm bảo tính đúng đắn của kết quả kiểm nghiệm
SQL> truncate table test_insert;
Table truncated.
SQL> insert /*+ APPEND*/ into test_insert select * from employees;
1100016 rows created.
Statistics
----------------------------------------------------------
184 recursive calls
9025 db block gets
7045 consistent gets
0 physical reads
153868 redo size
826 bytes sent via SQL*Net to client
817 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
1100016 rows processed
4.3. So sánh kết quả
5. Nếu bạn là DEV và chưa biêt tối ưu SQL nên bắt đầu từ đâu?
Hãy xem hết nội dung sau: : Click vào đây.
6. Nếu bạn là DEV và muốn toàn bộ những kinh nghiệm về tối ưu SQL của tôi, để trở nên KHÁC BIỆT so với các đồng nghiệp trên thị trường?
Hãy đọc về chương trình “Từ điển tối ưu 100x hiệu năng” tại đây: Click vào đây để tìm hiểu chương trình.
7. Thông tin tác giả
Tác giả: Trần Quốc Huy – Founder & CEO Wecommit.
Facebook: https://www.facebook.com/tran.q.huy.71
Youtube: https://www.youtube.com/channel/UCtsYzL7iN7rBCPnkjYp4XYw
Zalo: 0888549190
Email: huy.tranquoc@wecommit.com.vn