EngineeringSenior DeveloperTechnical Sessions

Session 26: Azure SQL Advanced & Performance

Chuyển đổi từ SQL Server On-Premise lên Cloud (Azure) đòi hỏi một số điều chỉnh về Mindset. Tài nguyên trên Cloud cực kỳ linh hoạt nhưng cũng... tính tiền theo "nhịp tim".

1️⃣ Tùy chọn triển khai (Deployment Options)

  • Azure SQL Database (PaaS thuần): Mức độ tự động hoá cao nhất. Không quan tâm Server (OS, cập nhật). Giới hạn ở mức Database.
  • Azure SQL Managed Instance (MI): Tính tương thích gần 100% với On-Prem SQL Server (Có SQL Server Agent, Cross-Database query, Service Broker). Dành cho migrate "Lift-and-Shift".
  • SQL Server on Azure VM (IaaS): Bạn tự quản lý OS. Chỉ dùng khi có yêu cầu phần cứng/OS đặc thù hoặc ứng dụng bên thứ 3 bắt buộc truy cập vào hệ điều hành.

2️⃣ Service Tiers: DTU vs vCore

DTU (Database Transaction Unit)

  • Là một rổ tài nguyên được tính gộp chung (CPU, Memory, I/O).
  • Dễ hiểu nhưng thiếu minh bạch: Nếu ứng dụng bạn ăn nhiều CPU nhưng ít I/O, bạn vẫn phải mua gói DTU cao -> lãng phí.

vCore (Virtual Core)

  • Bóc tách CPU, Memory, I/O độc lập.
  • Thích hợp cho hệ thống lớn, giúp tối ưu chi phí cực tốt với Azure Hybrid Benefit (mang license On-Premise lên Cloud để giảm giá tới 55%).

3️⃣ Tuning thông minh trên Azure SQL

Elastic Pools

Nếu bạn làm mô hình Multi-Tenant (Mỗi khách hàng 1 database, SaaS), bạn sẽ có 1000 databases. Thay vì cấu hình rải rác từng database, bạn gom chúng vào 1 Elastic Pool (dùng chung tài nguyên). Các cty không active cùng một lúc, do đó Elastic Pool giúp gánh tải qua lại -> tiết kiệm khổng lồ.

Query Store & Automatic Tuning

Query Store:

  • "Chiếc hộp đen" máy bay cho Database.
  • Ghi lại toàn bộ lịch sử Execution Plans. Nếu một ngày đẹp trời query chạy chậm đi (Plan Regression), Query Store sẽ cho bạn biết chính xác plan cũ là gì.

Automatic Tuning:

  • Tính năng buộc phải bật! Nó dựa trên ML và Query Store để tự tạo (Create) / xóa (Drop) Index, và quan trọng nhất là Tự động ép dùng Plan cũ (Force Last Good Plan) nếu phát hiện plan mới bất ngờ bị tệ đi.

4️⃣ High Availability & Read Scale-Out

  • Trong Azure SQL mức giá Premium/Business Critical, lúc nào cũng có 3 replica ẩn đằng sau.
  • Bạn có thể chuyển hướng các câu lệnh báo cáo (Read-only) bằng cách sửa Connection String ở App: Server=tcp:myserver.database.windows.net;...;ApplicationIntent=ReadOnly;
  • Nhờ ApplicationIntent=ReadOnly, báo cáo sẽ không tranh chấp (Lock) với các luồng ghi (Read-Write) chính thống.