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

Case Study: Câu lệnh SQL bị chậm – hệ thống tại bệnh viện

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:

câu lệnh sql bị chậm
Ghi chú:
  • 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 shared pool khiến câu lệnh sql bị chậm

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:

tối ưu cơ sở dữ liệu bước phân tích câu lệnh sql

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′

câu lệnh sql bị chậm vì truyền giá trị

 

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

Views: 1215





    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.