Pinned Post

Hướng dẫn: Gọi API web ASP.NET Core bằng JavaScript

Hướng dẫn này trình bày cách gọi API web ASP.NET Core bằng JavaScript, sử dụng Fetch API . Điều kiện tiên quyết Hướng dẫn đầy đủ : Tạo API web Có kiến thức về CSS, HTML và JavaScript. Gọi API web bằn…
Hướng dẫn: Gọi API web ASP.NET Core bằng JavaScript

Hiểu và đọc Execution Plan SQL Server để tối ưu hệ thống ERP bảng dữ liệu lớn

 Hướng dẫn đọc Execution Plan SQL Server từ cơ bản đến nâng cao, giúp tối ưu Stored Procedure, giảm IO, CPU và tăng tốc hệ thống ERP dữ liệu lớn.

Trong tất cả các kỹ năng tối ưu SQL Server, đọc Execution Plan là kỹ năng quan trọng nhất – nhưng cũng là kỹ năng bị bỏ qua nhiều nhất.

Rất nhiều lập trình viên ERP:

  • Tối ưu bằng cách… thêm index ngẫu nhiên
  • Query chậm thì đổ lỗi cho server
  • Stored Procedure chạy lâu thì RECOMPILE vô tội vạ

👉 Nhưng nếu bạn đọc đúng Execution Plan, bạn sẽ:

  • Biết SQL Server đang làm gì
  • Biết vì sao query chậm
  • Biết nên sửa ở đâu, không sửa mù

Bài viết này sẽ giúp bạn đọc Execution Plan như một DBA, nhưng theo góc nhìn lập trình ERP thực tế.


🔹 Execution Plan là gì – hiểu cho đúng

Execution Plan là kế hoạch thực thi mà SQL Server chọn để:

  • Truy xuất dữ liệu
  • JOIN bảng
  • Sắp xếp
  • Tính toán

👉 SQL Server không chạy SQL theo thứ tự bạn viết, mà theo Execution Plan.

Cùng một câu SQL – khác Execution Plan – tốc độ khác nhau hoàn toàn.



🔹 Các loại Execution Plan (cần biết)

Estimated Execution Plan

Khi bạn thực thi một câu truy vấn trong cơ sở dữ liệu, trình tối ưu hóa câu truy vấn sẽ tạo ra một kế hoạch thực hiện ước lượng trước khi thực sự thực hiện truy vấn. Kế hoạch này được xác định dựa trên thống kê và thông tin về cấu trúc của câu truy vấn.

Estimated Execution Plan thường được biểu diễn bằng cách sử dụng một số hình vẽ, biểu đồ hoặc bảng liệt kê các bước thực hiện và phương pháp được ước lượng.

Actual Execution Plan

Sau khi câu truy vấn đã được thực hiện, hệ quản trị cơ sở dữ liệu sẽ tạo ra một kế hoạch thực hiện thực tế dựa trên cách thức mà truy vấn được thực hiện trong môi trường thực tế.

Actual Execution Plan cũng có thể được biểu diễn bằng cách sử dụng các biểu đồ, bảng, hoặc thông tin chi tiết về mỗi bước trong quá trình thực hiện.

Sự khác biệt chính:

– Estimated Execution Plan: Dựa trên dự đoán của trình tối ưu hóa truy vấn trước khi truy vấn thực sự được chạy.

– Actual Execution Plan: Phản ánh thực tế sau khi truy vấn đã được thực hiện, dựa trên thông tin thực tế như số lượng bản ghi, thời gian thực hiện và điều kiện môi trường.

Việc so sánh giữa hai Execution Plan có thể giúp bạn hiểu rõ hơn về hiệu suất của câu truy vấn, giúp việc tối ưu hóa truy vấn dễ dàng hơn, để đảm bảo câu truy vấn được thực thi hiệu quả nhất.

Hình ảnh Execution Plan trong SQL Manager Studio

1️⃣ Estimated Execution Plan

  • Chỉ là ước lượng
  • Không phản ánh dữ liệu thật
  • Dùng khi chưa chạy query

👉 Không dùng để tối ưu ERP


2️⃣ Actual Execution Plan (BẮT BUỘC)

  • Phản ánh dữ liệu thật
  • Thể hiện:

  • Số dòng thực tế
  • IO
  • CPU
  • Dùng để tối ưu query & SP

👉 ERP luôn phải dùng Actual Execution Plan


🔹 Bật Execution Plan đúng cách

SET STATISTICS IO ON SET STATISTICS TIME ON

Và:

  • Include Actual Execution Plan (Ctrl + M)

👉 Không bật 2 cái này = tối ưu mù


🔹 Cách đọc Execution Plan – nguyên tắc sống còn

🔴 Quy tắc số 1: Đọc từ PHẢI sang TRÁI

  • Bên phải: dữ liệu nguồn
  • Bên trái: kết quả cuối

👉 90% người đọc sai hướng.


🔴 Quy tắc số 2: Quan tâm node tốn % cao nhất

  • % cao ≠ chậm
  • Nhưng là điểm nghi vấn đầu tiên

🔹 Các operator QUAN TRỌNG trong ERP

🔹 1️⃣ Table Scan / Clustered Index Scan (DẤU HIỆU NGUY HIỂM)

  • SQL Server đọc toàn bộ bảng
  • Với bảng vài triệu dòng → thảm họa

Nguyên nhân:

  • Không có index phù hợp
  • WHERE dùng hàm
  • Kiểu dữ liệu không khớp

👉 Trong ERP, scan bảng lớn = lỗi thiết kế


🔹 2️⃣ Index Seek (THỨ BẠN MUỐN THẤY)

  • SQL Server tìm đúng dữ liệu
  • IO thấp
  • Tốc độ nhanh

👉 Mục tiêu khi tối ưu:

Scan → Seek


🔹 3️⃣ Key Lookup – con dao hai lưỡi

Key Lookup không xấu, nhưng:

  • Ít dòng → OK
  • Nhiều dòng → CỰC CHẬM

Cách xử lý:

  • Thêm INCLUDE
  • Hoặc thiết kế lại index

🔹 4️⃣ Nested Loop / Hash Match / Merge Join

JoinKhi nào tốtKhi nào nguy hiểm
Nested LoopÍt dữ liệuNhiều dòng
Hash MatchDữ liệu lớnRAM yếu
Merge JoinDữ liệu đã sortÍt index

👉 ERP báo cáo lớn thường dùng Hash Match.


🔹 Estimated Rows vs Actual Rows – chỉ số VÀNG

👉 Đây là điểm quan trọng nhất khi đọc Execution Plan.

Nếu:

Estimated Rows: 100 Actual Rows: 1,000,000

❌ SQL Server chọn plan sai.

Nguyên nhân:

  • Statistic cũ
  • Parameter sniffing
  • WHERE không tối ưu

👉 Sai lệch càng lớn → hiệu năng càng tệ.


🔹 Parameter Sniffing nhìn từ Execution Plan

Dấu hiệu:

  • Query chạy nhanh với ngày nhỏ
  • Chạy chậm với ngày lớn
  • Execution Plan giống nhau

👉 Execution Plan được cache cho dữ liệu nhỏ.

Cách xử lý:

  • OPTION (RECOMPILE)
  • Gán biến local
  • Tách Stored Procedure

🔹 Execution Plan và Index – hiểu đúng để đánh chuẩn

❌ Sai lầm phổ biến

  • Thấy scan → tạo index ngay
  • Không xem WHERE / JOIN

✅ Cách làm đúng

  1. Xem WHERE
  2. Xem JOIN
  3. Xem SELECT
  4. Tạo index theo thứ tự đó

Ví dụ:

WHERE NgayCong BETWEEN @TuNgay AND @DenNgay AND MaNhanVien = @MaNV

👉 Index đúng:

(NgayCong, MaNhanVien) INCLUDE (...)

🔹 Execution Plan với Temp Table

Nếu thấy:

  • Table Scan trên #Temp
  • Nhưng bảng lớn

👉 Thiếu index cho temp table.

ERP dùng temp table phải đánh index, không ngoại lệ.


🔹 Case thực tế: Đọc Execution Plan cứu hệ thống ERP

Trước:

  • SP lương chạy 70 giây
  • Clustered Index Scan
  • Estimated Rows ≠ Actual Rows

Phát hiện:

  • WHERE dùng YEAR(Ngay)
  • Statistic cũ

Sau:

  • Viết lại WHERE
  • Update statistic
  • Thêm INCLUDE

👉 Kết quả:
70s → 4s


🔹 Những hiểu lầm tai hại về Execution Plan

❌ % cao nhất là chậm nhất
❌ Có index là nhanh
❌ Hash Match luôn xấu
❌ SQL Server tự tối ưu là đủ

👉 ERP không cho phép hiểu lầm.


🔹 Checklist đọc Execution Plan cho ERP

✅ Có scan bảng lớn không?
✅ Estimated ≠ Actual bao nhiêu?
✅ Có Key Lookup nhiều không?
✅ JOIN loại gì?
✅ Có dùng đúng index không?


🔹 Kết luận

Nếu bạn chỉ nhớ 1 điều duy nhất, hãy nhớ:

Execution Plan không nói dối.

SQL Server luôn cho bạn biết:

  • Nó đang làm gì
  • Vì sao chậm
  • Bạn cần sửa ở đâu

Trong ERP:

Biết đọc Execution Plan = nắm quyền kiểm soát hệ thống.


🔹 FAQ

❓ Có nên tin 100% Execution Plan?
👉 Tin để phân tích, không tin mù.

❓ Bao lâu nên xem lại Execution Plan?
👉 Mỗi lần dữ liệu tăng mạnh hoặc thêm tính năng.

❓ DBA hay Dev nên đọc Execution Plan?
👉 Cả hai, nhưng Dev ERP là người cần nhất.







Post a Comment

Hoan nghênh sự góp ý của bạn cho website!
- Nếu bạn không có các tài khoản để nhắn tin/bình luận bạn có thể chọn trong "Nhận xét với tư cách" với tài khoản "Ẩn danh" (Anonymous).

Cám ơn bạn đã đọc blog! Chúc bạn tìm được nhiều bài viết hay và hữu ích cho mình!
Bài đăng phổ biến
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Test link