Bài viết này tôi sẽ chia sẻ 1 Case Study câu lệnh SQL bị chậm tại một hệ thống thông tin bệnh viện (HIS – Hospital Information System). Đây là một trong các kinh nghiệm thuộc chương trình Từ điển tối ưu 100x hiệu năng.
1. Mô tả hiệu năng của hệ thống khi có cảnh báo câu lệnh SQL bị chậm
Tại thời điểm hệ thống bị chậm/ treo, gần như toàn bộ các câu lệnh SQL đều thực thi chậm hơn bình thường hàng chục lần.
Nhiều câu lệnh SQL nếu chạy riêng lẻ chỉ mất chưa tới 1s, nhưng thời điểm này thực thi lên tời vài chục giây mới xong.
Dưới đây là biểu đồ hiệu năng của toàn bộ cơ sở dữ liệu lúc có cảnh báo câu lệnh SQL bị chậm:

- Phần màu xanh (nhỏ xíu bên tay trái) thể hiện hệ thống đang sử dụng tài nguyên CPU
- Phần màu hồng (rất lớn bên tay phải từ thời điểm 8h52 đến 9h) thể hiện hệ thống đang bị WAIT.
2. Phân tích vấn đề dẫn tới câu lệnh SQL bị chậm
Khi kiểm tra chi tiết, tôi phát hiện toàn bộ các câu lệnh SQL đang bị Wait: cursor: Pin S wait on X
Wait này liên quan đến quá trình phân tích câu lệnh (một trong 6 bước thực hiện của hệ thống khi nhận được câu lệnh SQL).
6 bước thực hiện của câu lệnh SQL tôi đã từng chia sẻ chi tiết trong một bài viết khác. Bạn có thể đọc chi tiết bài viết này tại đây.
Tóm tắt nội dung thì 6 bước này như sau:
Hệ thống đang bị nghẽn vì liên tục phải phân tích lại câu lệnh (rơi vào trường hợp HARD PARSE) và phải thực hiện 2 bước màu đỏ (ảnh hưởng lớn tới hiệu năng).
3. Nguyên nhân gốc dẫn tới hiện tượng HARD PARSE quá nhiều và làm toàn bộ câu lệnh SQL bị chậm hơn hàng chục lần
Nguyên nhân gốc trong tình huống này vì ứng dụng sử dụng quá nhiều câu lệnh truyền trực tiếp giá trị.
Ví dụ như sau câu lệnh sau đang truyền trực tiếp giá trị ’01/03/2023 08:32′
Vấn đề này có thể cải thiện bằng nhiều cách thức, trong đó có 1 giải pháp: sử dụng truyền biến (sử dụng :B1) thay vì truyền trực tiếp giá trị như trên.
Bạn có thể tìm hiểu cụ thể hơn về giải pháp này thông qua bài viết (Demo tăng tốc câu lệnh hơn 97% bằng cách sử dụng truyền biến, thay vì truyền trực tiếp giá trị): Đọc bài viết tại đây.
4. 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.
5. 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.
6. 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