ĐĂNG KÝ ĐỂ NHẬN THÔNG TIN MỚI NHẤT

Sử dụng Insert Append để tăng tốc câu lệnh Insert

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

Conventional Insert

TH2: Sử dụng Insert Append

insert /*+ APPEND*/ into test_insert select * from employees

insert append execution plan

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ả

Khi phân tích hiệu năng chi tiết của 2 câu lệnh, chúng ta có thể nhận thấy
– Lượng Redo log sinh ra khi thực hiện INSERT APPEND chỉ bằng 0.2% so với lượng Redo Log sinh ra khi thực hiện câu lệnh Insert thông thường.
Do lượng sinh Redo log sinh ra ít hơn rất nhiều, nên mặc dùng có cùng chi phí thực thi (COST =2K), nhưng hiệu năng và thời gian thực hiện của câu lệnh INSERT APPEND sẽ tốt hơn câu lệnh INSERT thông thường
Ghi chú: Môi trường thực hiện việc đánh giá này
– Oracle Database 19c
– Table test_insert cấu hình NOLOGGING

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

Views: 1754





    Câu hỏi bảo mật

    Trả lời

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    Ask ChatGPT
    Set ChatGPT API key
    Find your Secret API key in your ChatGPT User settings and paste it here to connect ChatGPT with your Tutor LMS website.