Trong kỷ nguyên internet, website là một phần không thể thiếu trong mọi hoạt động số từ tin tức tới giải trí, mua bán hàng,.. Do đó để tạo trải nghiệm tốt cho người dùng thì tối ưu tốc độ load cũng là một điều cần thiết đối với những website có lượng truy cập lớn để đảm bảo người dùng của bạn có thể có trải nghiệm tốt nhất trên cả những thiết bị. Trong bài viết hôm nay, mình sẽ hướng dẫn các bạn sử dụng tool MySQLTuner để tối ưu cho MySQL server.
Giới thiệu
MySQLTuner là một Script viết bằng Perl, giúp bạn chỉnh cấu hình và đề xuất những giải pháp tăng hiệu quả trong hoạt động, độ ổn định máy chủ cơ sở dữ liệu dùng MySQL của bạn.
MySQLTuner được viết để hỗ trợ bạn cấu hình, cải thiện tốc độ, tối ưu hoá những cài đặt quan trọng, giúp máy chủ cơ sở dữ liệu hoạt động tốt trên định mức nhất có thể. MySQLTuner giúp người quản trị cài đặt tối ưu cho các nguồn tài nguyên cụ thể giúp trong việc xử lý quá trình máy chủ tốt hơn và ngăn ngừa máy chủ chậm xuống.
MySQLTuner đưa ra gợi ý về việc làm thế nào giúp cơ sở dữ liệu của bạn tốt hơn. Nếu bạn đang lo lắng về việc cập nhật cơ sở dữ liệu của bạn theo cách riêng của bạn sẽ gây ra lổi cho hệ thống, thì bạn nên đi theo các gợi ý của MySQLTuner là một trong những cách an toàn hơn để cải thiện hiệu suất cơ sở dữ liệu của bạn.
Hướng dẫn sử dụng MySQLTuner
Đầu tiên ta vào máy chủ của bạn và thực hiện các bước sau:
Tải MySQLTuner
Đầu tiên ta tải MySQLTuner tại địa chỉ thông qua lệnh sau tại địa chỉ này:
wget http://mysqltuner.pl/ -O mysqltuner.pl
Cài đặt quyền
Cài đặt quyền để có thể thực thi lệnh :
chmod +x mysqltuner.pl
Thực thi MySQLTuner
Trước khi thực thi, cơ sở dữ liệu của bạn phải hoạt động lâu hơn 1 ngày trước khi bạn chạy MySQLTuner để có được kết quả chính xác. Điều này là do MySQLTuner dựa trên các khuyến nghị của nó về việc sử dụng cơ sở dữ liệu trong quá khứ. Trên thực tế, việc chạy MySQLTuner trên một máy chủ mới được khởi động lại là hoàn toàn vô ích.
Để chạy lệnh MySQLTuner ta thực hiện lệnh sau:
perl mysqltuner.pl
Sau khi thực thi xong thì kết quả output sẽ có dạng như sau:
Trong một số trường hợp thì có thể sẽ yêu cầu bạn nhập username và password.
Có một vài option cho câu lệnh này:
-
Phương thức authenticate
--host <tên máy chủ> : Kết nối với máy chủ từ xa để thực hiện kiểm tra (mặc định: localhost) --socket <socket> : Sử dụng một socket khác cho kết nối cục bộ --port <port> Cổng để sử dụng cho kết nối (mặc định: 3306) --user <tên người dùng> Tên người dùng để sử dụng để xác thực --pass <password> Mật khẩu sử dụng để xác thực --mysqladmin <path> Đường dẫn đến tệp thực thi mysqladmin tùy chỉnh --mysqlcmd <path> Đường dẫn đến tệp thực thi mysql tùy chỉnh
-
Một vài option về đo performance và xuất báo cáo
--skipsize Không liệt kê các bảng và các loại / kích thước của chúng (mặc định: bật) (Khuyến nghị cho các máy chủ có nhiều bảng) --skippassword Không thực hiện kiểm tra mật khẩu người dùng (mặc định: tắt) --checkversion Kiểm tra các bản cập nhật cho MySQLTuner (mặc định: không kiểm tra) --forcemem <size> Dung lượng RAM được cài đặt tính bằng megabyte --forceswap <size> Dung lượng bộ nhớ hoán đổi được định cấu hình theo megabyte --passwordfile <đường dẫn> Đường dẫn đến danh sách tệp mật khẩu (một mật khẩu từng dòng)
Ngoài ra bạn có thể xem thêm các option của MySQLTuner thông qua lệnh sau:
perl mysqltuner.pl --help
Thứ tự kiểm tra của tool MySQLTuner sẽ hoạt động kiểm tra lần lượt theo các tiêu chí sau:
MySQLTuner-perl/INTERNALS.md at master · major/MySQLTuner-perl
MySQLTuner báo cáo thống kê về cơ sở dữ liệu và đưa ra các đề xuất điều chỉnh. Phần trên cùng của báo cáo cung cấp cho bạn các chỉ số cơ sở dữ liệu hữu ích, nhiều trong số đó có thể thực hiện được. Phần dưới cùng cung cấp các đề xuất điều chỉnh cho tệp cấu hình MySQL.
Tại đầu mỗi dòng kết quả có các ký hiệu với ý nghĩa:
[OK] : Kết quả kiểm tra ok
[--] : Các mục này bị skip qua, hoặc disable
[!!] : Mục này cần điều chỉnh, chưa tốt
Điều chỉnh và cập nhật cấu hình
Tiếp theo, ta hãy xem xét để cập nhật các biến trong tệp my.cnf theo các đề nghị do MySQLTuner đưa ra.
Khi thay đổi cấu hình MySQL, hãy cảnh giác với những thay đổi và cách chúng ảnh hưởng đến cơ sở dữ liệu của bạn. Ngay cả khi làm theo hướng dẫn của các chương trình như MySQLTuner , tốt nhất là bạn nên hiểu rõ về từng thay đổi mà chúng ta điều chỉnh.
Các tập tin cấu hình MySQL thường lưu trữ trong các vị trí sau trên máy chủ: /etc/my.cnf.
Trước khi cập nhật cấu hình MySQL của bạn, hãy tạo một bản sao lưu của my.cnf
:
cp /etc/my.cnf ~/my.cnf.backup
Phương pháp hay nhất đề xuất rằng bạn thực hiện các thay đổi nhỏ, lần lượt và sau đó theo dõi máy chủ sau mỗi lần thay đổi.
Khởi động lại Mysql Server
Bạn cần khởi động lại máy chủ Mysql để các thay đổi trên có hiệu lực.
Đối với các bản phân phối sử dụng systemd:
systemctl restart mysqld
Đối với các bản phân phối với các hệ thống init khác nhau:
service mysql restart
Đợi sau đó khoảng một , chạy lại MySQLTuner và kiểm tra lại nếu các giá trị được tốt hơn chưa, hoặc có thể tăng lên một giá trị cao hơn.
Bạn có thể chạy MySQLTuner nhiều lần để kiểm tra xem nó có đề xuất thêm để cải thiện hiệu suất của MySQL hay không.
Lập lịch chạy
Khi chúng ta thực hiện công việc cải thiện hiệu năng của MySQL server, thì việc điều chỉnh cơ sở dữ liệu không phải là loại tác vụ “một lần là có thể thực hiện xong” vì do có nhiều yếu tố ảnh hướng đến hiệu năng sẽ thay đổi theo thời gian. Một phương pháp có thể áp dụng là chúng ta sẽ lập lịch chạy MySQLTuner thường xuyên bằng crontabs
để theo dõi MySQL server để từ đó có thể đưa ra những điều chỉnh cần thiết để cải thiện hiệu năng cho MySQL server.
Trước tiên, mọi người đảm bảo là mình đã cài đặt crontab.
yum install cronie
Lịch trình MySQLTuner sau đây sẽ chạy vào thứ Năm hàng tuần lúc 4:30 sáng:
(crontab -l; echo "30 04 * * 4 perl <path-to-script>/mysqltuner.pl --nocolor 2>&1") | crontab -
Sau khi đến khoảng thời gian trên thì hệ thống sẽ thông báo cho chúng ta như sau:
Khi chúng ta vào file như hệ thống thông báo và mở file lên thì sẽ hiện màn hình kết quả như sau:
Các nguyên tắc cơ bản cần lưu ý khi tuning MySQL
Khi tuning performacnce chúng ta cần lưu ý những điểm sau:
-
Sử dụng công cụ để đo lại sự thay đổi sau mỗi lần đổi config (Monitoring tool)
- Điều này rất quan trọng vì để mình xem lại kết quả, và thu thập thông tin để tiếp tục điều chỉnh giá trị của option để tìm giá trị cho phù hợp
-
Chỉ nên thay đổi một option ở một thời điểm
- Nếu thay đổi nhiều option ở một thời điểm, chúng ta sẽ không đo được sự thay đổi của từng option.
- Thay đổi nhiều option nhiều khi chúng sẽ ảnh hưởng đến nhau, dẫn đến tình trạng thay đổi nhiều option không tốt bằng thay đổi một option
-
Thay đổi giá trị của option từ từ trong quá trình tuning
- Từ từ thay đổi lên chứ không nên thay đổi quá lớn lần đầu, vì lúc đó có thể rất tệ
-
Hiểu được option đó làm gì
- Phải hiểu được option thì chúng ta sẽ biết rằng option đó có hữu ích không và biết những ảnh hưởng sẽ xảy ra sau khi điều chỉnh chúng hay không.
Kết luận
Qua bài viết trên, hi vọng cung cấp cho mọi người về cách sử dụng ứng dụng MySQLTuner để có thể thực hiện cải tiến performance cho ứng dụng.
Ngoài ra, ta vẫn có thể sử dụng một số công cụ khác có thể dùng Tunrning Performance tương tự MySQLTuner như:
- Tuning-Primer
- Percona Toolkit
- phpMyAdmin Advisor
- Mysqlreport
Tài liệu tham khảo
- https://powernet.vn/knowledgebase/166/Toi-uu-hoa-hieu-suat-MySQL-voi-mysqltuner.html
- https://mangmaytinh.net/threads/huong-dan-su-dung-mysqltunner.98/
- https://thietkewebsite.info.vn/toi-uu-hoa-hieu-suat-mysql-voi-mysqltuner
- https://viblo.asia/p/how-to-optimize-mysql-indexes-slow-queries-configuration-6J3Zg2OgKmB
- https://hevodata.com/learn/mysqltuner/
- https://noisystream.lq2music.com/2018/01/cai-dat-mot-web-server-toi-uu-ve-toc-do/
- https://raazkumar.com/tutorials/mysql/mysqltuner/
- https://checknotes.wordpress.com/2016/02/10/optimize-mysql-using-mysqltuner-pl/
- https://www.rosehosting.com/blog/install-and-use-mysqltuner-on-ubuntu-14-04/
- https://blog.pythian.com/audit-mysql-instance-with-mysqltuner