MySQL performance tuning: Giới thiệu tổng quan

MySQL performance tuning: Giới thiệu tổng quan

Xem nhanh

Performance tuning là việc thực hiện cải thiện hiệu suất của hệ thống, ứng dụng. Có rất nhiều yếu tố ảnh hưởng đến performance của ứng dụng. Chính vì thế, để thực hiện performance tuning cũng sẽ có rất nhiều cách tiếp cận khác nhau: combine CSS, JavaScript, và HTML files, tối ưu kích thước hình ảnh, giảm số lượng HTTP requests, lựa chọn Hosting Service Plan phù hợp, v.v.

Trong các yếu tố ảnh hưởng đến performance, thì Database performance là một yếu tố quan trọng. Nếu bạn đang muốn cải thiện performance cho ứng dụng của mình thì việc tuning ở tầng database là không thể bỏ qua.

Bài viết này giới thiệu tổng quan về database performance tuning, cụ thể là MySQL performance tuning.

MySQL performance tuning

Database performance phụ thuộc vào nhiều yếu tố:

  • Ở cấp độ database, các yếu tố này là: table, query, configuration setting.
  • Ở cấp độ hardware level, các yếu tố này là: CPU, I/O, memory.

Do đó, để tối ưu Database performance sẽ có 2 cấp độ tương ứng: tối ưu tại cấp độ Database và tối ưu tại cấp độ Hardware.

Tối ưu tại cấp độ Database

Thiết kế của cơ sở dữ liệu chính là yếu tố quan trọng nhất giúp một ứng dụng database nhanh:

  • Các bảng được cấu trúc đúng cách không? Đặc biệt là các columns có đúng data types, và mỗi bảng có các cột thích hợp với nghiệp vụ chưa? Ví dụ: các ứng dụng thường xuyên thực hiện update sẽ có nhiều bảng với ít cột. Trong khi đó, ứng dụng phân tích lượng lớn dữ liệu thì có ít bảng với nhiều cột.
  • các index phù hợp để truy vấn hiệu quả không?
  • Có đang sử dụng storage engines thích hợp cho mỗi bảng không? Có tận dụng các điểm mạnh, tính năng của các công cụ lưu trữ chưa? Thêm vào đó, việc lựa chọn công cụ lưu trữ hỗ trợ transaction như InnoDB hoặc nontransaction như MyISAM cũng rất quan trọng cho hiệu suất và khả năng mở rộng.
  • Ứng dụng đã sử dụng lock strategy phù hợp? Ví dụ: cho phép truy cập chia sẻ khi có thể để các hoạt động của cơ sở dữ liệu có thể chạy đồng thời, và yêu cầu quyền truy cập độc quyền khi thích hợp để các hoạt động quan trọng được ưu tiên hàng đầu. Một lần nữa, sự lựa chọn storage engines là rất quan trọng. InnoDB xử lý hầu hết các vấn đề về khóa mà không cần bạn tham gia, cho phép cơ sở dữ liệu đồng thời tốt hơn và giảm số lượng thử nghiệm và điều chỉnh cho mã của bạn.
  • Tất cả các memory areas used for caching có kích thước phù hợp? Tức là, đủ lớn để chứa dữ liệu được truy cập thường xuyên, nhưng không lớn đến mức chúng làm quá tải bộ nhớ vật lý và gây ra phân trang. Các memory areas chính cần cấu hình là: InnoDB buffer và MyISAM key cache.

Tối ưu tại cấp độ Hardware

Bất kỳ ứng dụng cơ sở dữ liệu nào cuối cùng cũng đạt đến giới hạn phần cứng khi cơ sở dữ liệu ngày càng trở nên bận rộn hơn. DBA phải đánh giá xem liệu có thể điều chỉnh ứng dụng hoặc cấu hình lại máy chủ để tránh bottlenecks hoặc liệu có cần thêm tài nguyên phần cứng hay không. Tắc nghẽn hệ thống thường phát sinh từ các nguồn sau:

  • Disk seeks
  • Disk reading and writing
  • CPU cycles
  • Memory bandwidth

Kết

Thực vậy, việc tối ưu hoá hiệu suất database có rất nhiều yếu tố tác động. Chúng ta có thể xem xét việc tối ưu nên thực hiện ở cấp độ nào tuỳ thuộc vào từng vai trò khác nhau.

Trong loạt bài MySQL performance tuning, các bài viết sẽ tập trung vào việc cải thiện ở cấp độ database: tối ưu câu query, tìm hiểu các công cụ hỗ trợ tuning, v.v. Mời các bạn theo dõi các bài viết sắp tới trong series này nhé!

Tài liệu tham khảo

MySQL :: MySQL 8.0 Reference Manual :: 8.1 Optimization Overview

Các bài viết cùng chủ đề