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

Hiểu về Estimated Execution Plan và Actual Execution Plan để tối ưu SQL

Năm 2018, tôi trực tiếp tối ưu hệ thống HIS tại VNPT. Tình huống gặp phải như sau: Câu lệnh ước lượng thời gian thực thi chỉ vài giây, nhưng thực thi lâu hơn vài chục lần. Nếu bạn muốn xử lý những tình huống giống như trên, các bạn bắt buộc cần phải hiểu một kiến thức nền tảng, vô cùng quan trọng: Estimated Execution Plan và Actual Execution Plan.

1. Vấn đề đầu tiên bạn cần biết: Execution Plan là gì, và tại sao cần kiểm tra Execution Plan khi một câu lệnh có hiện tượng chậm?

Execution Plan là thuật ngữ chuyên ngành trong các tài liệu tiếng Anh, anh em kỹ sư Việt thường gọi là “Chiến lược thực thi của câu lệnh”.

Về tổng quan thì đây chính là các bước hướng dẫn để hệ quản trị cơ sở dữ liệu có thể thực hiện được yêu cầu trong một câu lệnh SQL.

Để dễ hiểu bạn cứ tưởng tượng như sau:

  • Hành động chúng ta gửi câu lệnh SQL đến hệ thống cũng giống như việc chúng ta gọi điện thoại lên tổng đài taxi và đặt xe.
  • Người tài xế taxi khi nhận được yêu cầu sẽ đi tới địa điểm để đón chúng ta. Lộ trình mà người tài xế lựa chọn chính là Execution Plan.
  • Khi người tài xế phải mất rất nhiều thời gian mới tới đón hành khách, cũng giống như một câu lệnh SQL thực hiện với thời gian rất lâu, người dùng có cảm giác “câu lệnh chậm, treo”.
  • Trong các trường hợp như trên, điều đầu tiên chúng ta cần quan tâm là “đường đi mà người tài xế lựa chọn đã phải ngắn nhất, tối ưu hay chưa”, chúng ta sẽ chưa quan tâm tới người tài xế đi xe loại gì, trời có mưa hay không … (mấy hình ảnh này tương đương với việc hệ thống đang dùng server có tài nguyên CPU, RAM thế nào, có dùng ổ cứng SSD hay không…).
  • Ghi chú: Execution Plan tồn tại với tất cả các loại cơ sở dữ liệu (Oracle, SQL Server, PostgreSQL, MySQL…)

Tôi đã viết rất nhiều bài từ cơ bản về Execution Plan, bạn có thể đọc tại đây

2. Có đến 2 loại chiến lược thực thi của câu lệnh: Estimated Execution Plan và Actual Execution Plan

2.1. Estimated Execution Plan và Actual Execution Plan là gì

Estimated Execution Plan: Đây là chiến lược thực thi mà hệ thống “đoán” (Estimated) câu lệnh sẽ cần phải thực hiện. Chúng ta có thể xem chiến lược thực thi này ngay lập tức, mà không cần phải thực thi câu lệnh SQL.

Actual Execution Plan: Đây là chiến lược thực thi thực tế, khi hệ thống chính thức thực hiện câu lệnh SQL.

Thông thường, bạn sẽ thấy đa số các trường hợp các câu lệnh SQL sẽ có Estimated Execution Plan và Actual Execution Plan trùng với nhau. Các hệ thống nhỏ, tải thấp thì rất hiếm khi bạn gặp trường hợp 2 chiến lược này khác biệt.

2.2. Demo Estimated Execution Plan và Actual Execution Plan trong Oracle Database

Tôi sử dụng công cụ Toad trong Demo này

Cơ sở dữ liệu: Oracle Database phiên bản 19c.

Câu lệnh SQL:

select * from emp where first_name='TRAN' and last_name='HUY'

Thực hiện ấn vào BUTTON như hình bên dưới để xem Estimated Execution Plan.

Bản chất hệ thống chưa cần phải thực hiện câu lệnh SQL.

 

Demo kiểm tra Estimated Execution Plan

 

Nếu muốn kiểm tra Actual Execution Plan chúng ta làm như sau

  • Thực hiện thực thi câu lệnh SQL
  • Kiểm tra câu lệnh đang thực thi của Session

Kiểm tra Actual Execution Plan

Khi click vào Tab Explain Plan, lúc này chúng ta có thể biết được chiến lược thực thi chính xác khi thực hiện (Actual Execution Plan) của câu lệnh

Actual Execution Plan

2.4. Demo Estimated Execution Plan và Actual Execution Plan trong SQL Server

Tại demo này tôi sẽ sử dụng công cụ kinh điển Microsoft SQL Server Management Studio để thực hiện kiểm tra chiến lược thực thi của câu lệnh SQL

Để xem chiến lược thực thi mà hệ thống đang dự đoán các bạn có thể ấn vào hình bôi đỏ hoặc sử dụng phím tắt Ctl + L.

Estimated Execution Plan trong SQL Server

 

Trong SQL Server, bạn có thể kiểm tra cụ thể hơn những thông số của chiến lược thực thi, kết quả thu được như sau

Thông số chi tiết của Execution Plan

 

Bây giờ nếu muốn xem thông tin “Actual Exeuction Plan”, chúng ta làm như sau

  • Click vào Button “Include Live Query Statistics”, sau đó ấn Execute
  • Lúc này câu lệnh sẽ được thực hiện trong hệ thống, và chiến lược thực thi “thực tế” sẽ hiển thị ở bên dưới

Actual Execution Plan

Chúng ta cũng có thể xem chi tiết các thông số tài nguyên của chiến lược thực thi này, kết quả như sau

Actual Execution Plan

 

3. Trường hợp nào Case Study tại VNPT, tại sao câu lệnh khi thưc thực tế lại có chiến lược khác với dự tính ban đầu?

Case Study này do anh em DEV mắc phải một sai lầm liên quan đến Statistics của bảng. Đây cũng là một trong những sai lầm mà tôi có phân tích chi tiết trong Series Các sai trong dự án tối ưu 

Link truy cập hệ thống kho kinh nghiệm tối ưu dành riêng cho DEV : Click vào đây 

 

3. Nếu bạn muốn có dược tất cả những kinh nghiệm tối ưu SQL, tối ưu Cơ sở dữ liệu để trở nên khác biệt hoàn toàn so với các anh em DEV trên thị trường

Bước 1: Tham gia nhóm Zalo Tư Duy – Tối Ưu – Khác Biệt để cập nhật các kiến thức, bí kíp tối ưu hàng tuần + Hướng dẫn truy cập kho bí kíp mà không cần đăng ký tài khoản. Link truy cập nhóm: Click vào đây

Bước 2: Đăng ký kênh youtube của tôi nếu bạn muốn xem Demo Video những kinh nghiệm tối ưu SQL. Đăng ký kênh Youtube tại đây: Click vào đây để đến Series Video tối ưu SQL

Bước 3: Nếu bạn muốn có kinh nghiệm tối ưu và được trực tiếp tôi hướng dẫn, bạn có thể xem chương trình có phí tại đây: Click vào đây

4. Nếu bạn muốn liên hệ với tác giả của bài viết – Trần Quốc Huy – CEO Wecommit

Zalo: 0888549190

Facebook cá nhân: https://www.facebook.com/tran.q.huy.71/

Email: huy.tranquoc@wecommit.com.vn

Views: 1173





    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.