Database Performance (hiệu năng cơ sở dữ liệu) cho website là việc đo và tối ưu cách ứng dụng truy vấn, khóa và sử dụng kết nối với database. Khi database trở thành điểm nghẽn (bottleneck), website thường biểu hiện bằng TTFB cao, request động chậm, timeout, trang quản trị lag hoặc tài nguyên tăng dù tài nguyên tĩnh và CDN vẫn bình thường.
Tóm tắt: Đừng bắt đầu bằng “dọn database” hoặc “thêm index”. Hãy khóa endpoint chậm, truy vấn (query) nào tốn thời gian, số lần gọi, số hàng dữ liệu phải quét (rows examined), lock/wait, connection và thay đổi gần nhất; sau đó mới quyết định tối ưu query, index, cache, connection hay năng lực hệ thống.

Nhận biết database đang là bottleneck
Không kết luận chỉ vì “database CPU cao”. Database đáng nghi khi độ trễ (latency) hoặc lỗi ở request động tăng cùng thời gian chạy query, số kết nối, thời gian chờ khóa, hoạt động đọc/ghi I/O (Input/Output) hoặc số lượng query. Các dấu hiệu thường gặp là admin/search/checkout/API (Application Programming Interface — giao diện lập trình ứng dụng) chậm, TTFB (Time to First Byte — thời gian tới byte đầu tiên) tăng trong khi asset tĩnh bình thường, hoặc issue bắt đầu ngay sau deploy/plugin update hay khi dataset/concurrency tăng.
Nếu đang triage website chậm theo nhiều lớp, bắt đầu ở Website Performance Degradation để tách frontend, application, cache/CDN, database và resource saturation trước khi tối ưu riêng database.
Tìm query và workload gây impact
Slow Query Log là log ghi các truy vấn chậm; APM (Application Performance Monitoring) giúp theo dõi hiệu năng ứng dụng theo request; profiling giúp xem thời gian được dùng ở đâu. Ba nguồn này giúp xác định candidate cần điều tra, nhưng “query chậm” không đồng nghĩa query đó chắc chắn viết sai. Thời gian có thể tăng vì lock, thiếu index, dataset lớn, I/O, connection hoặc dependency khác.
| Tín hiệu | Câu hỏi cần trả lời |
|---|---|
| Query duration | Query nào chiếm nhiều thời gian nhất trong endpoint bị ảnh hưởng? |
| Frequency | Một query vừa phải nhưng bị gọi hàng nghìn lần? |
| Rows examined | Query có quét nhiều dữ liệu hơn cần thiết? |
| Lock / wait | Transaction có đang chờ nhau? |
| Connection | Pool có gần giới hạn hoặc request phải chờ connection? |
| I/O | Storage, backup hoặc workload khác có làm database chậm? |
N+1 query là tình huống một thao tác ban đầu kéo theo nhiều truy vấn phụ lặp lại. Không có một query cực chậm nhưng endpoint vẫn có thể phát sinh hàng trăm query nhỏ. Vì vậy cần xem endpoint → query count → tổng thời gian database, không chỉ top slow query.
Index, connection và cache: chọn đúng control
Index là cấu trúc giúp database tìm dữ liệu nhanh hơn cho một số truy vấn, nhưng index sai hoặc quá nhiều cũng tăng chi phí ghi và lưu trữ. Trước khi thêm index, cần đọc kiểu query, độ phân biệt của dữ liệu (cardinality) và kế hoạch thực thi (execution plan) phù hợp với database đang dùng.
Connection/lock có thể làm latency tăng dù query riêng lẻ không đổi. Khi số thao tác đồng thời (concurrency) tăng, theo dõi active connection, wait/lock và thời gian giữ transaction. Nếu connection/resource tiến gần giới hạn, xem Resource Saturation.
Cache có thể giảm request động nhưng không sửa logic query sai và đôi khi che bottleneck cho đến lúc MISS tăng. Khi nghi cache đang đẩy tải về origin/database, xem Cache & CDN.
WordPress/WooCommerce: lỗi thường nằm ở query pattern
Với WordPress/WooCommerce, bottleneck thường đến từ meta query trên dataset lớn, search/filter phức tạp, autoload/options nặng, plugin tạo query lặp, session/cart/order workload hoặc cron/background job quét nhiều record. Không nên xóa table/options theo checklist chung nếu chưa biết plugin owner và phụ thuộc dữ liệu.

Nếu cần baseline — mức bình thường dùng làm mốc so sánh — và correlation theo thời gian, nối telemetry database vào Website Monitoring thay vì chỉ mở slow-query log khi có sự cố.
Quy trình triage database chậm
- Khóa endpoint và timeline: URL/function nào chậm, bắt đầu khi nào, recent change gì?
- So baseline: latency, query count, DB time, connection, lock và workload.
- Tìm candidate: slow query/APM/profile theo endpoint.
- Phân loại root cause: query pattern, index, N+1, lock, connection, I/O, cache hoặc saturation.
- Test fix: staging hoặc môi trường an toàn với dataset/workload đủ đại diện.
- Deploy có monitoring + rollback: theo dõi latency/error/query/resource sau change.
- Load validate nếu cần: nếu bottleneck chỉ xuất hiện khi concurrency cao, dùng Capacity Planning & Load Testing.
Checklist quyết định
- Có endpoint/query mapping và baseline.
- Có slow-query/APM visibility.
- Có query count, duration, rows examined và frequency.
- Có connection/lock/I/O monitoring.
- Không thêm index hoặc xóa dữ liệu chỉ theo checklist chung.
- Fix được test trước production khi có thể.
- Post-change có acceptance metric và rollback.
Kết luận
Database Performance là một nhánh của Website Performance & Reliability. Câu hỏi đúng không phải “database có cần optimize không?”, mà là query hoặc workload nào đang làm critical journey chậm, evidence nào chứng minh root cause và control nào giải quyết đúng bottleneck.
Nguồn tham khảo: MySQL Reference Manual – Slow Query Log.
Đoàn Trình Dục là Giảng viên Khoa Công nghệ Thông tin tại Đại học Công nghệ Sài Gòn (STU), với hơn 10 năm kinh nghiệm thực chiến trong các lĩnh vực Mạng máy tính, Marketing Online, SEO và Bảo mật hệ thống.
Với nền tảng sư phạm và kinh nghiệm tư vấn cho nhiều doanh nghiệp, thầy chuyên sâu vào việc xây dựng các giải pháp kỹ thuật số toàn diện và hiệu quả.

