[MySQL] Hướng dẫn cấu hình log “slow query” trên dịch vụ MySQL

Tìm hiểu cách cấu hình chức năng ghi log với các truy vấn query tốn nhiều thời gian thực thi thành công trên dịch vụ MySQL.

Nhìn cái tiêu đề thôi là các bạn cũng có thể hiểu bài viết này đề cập đến việc cấu hình ghi lại thông tin log các truy vấn query tốn nhiều thời gian để thực thi thành công trên hệ thống dịch vụ MySQL. Điều này khá là giúp ích trong việc xác định xem vấn đề có nằm ở code gây ra hiện tượng query CSDL lâu hay không. Nhìn chung cấu hình đơn giản vô cùng chả có gì khó cả.

Cấu hình dưới đây áp dụng chính thức từ MySQL v5.6, phiên bản thấp hơn sẽ có sự thay đổi khác được nêu ở phần “Lưu ý” cuối bài. Cấu hình này nếu cấu hình trong file “my.cnf” hay các tên file sử dụng cho hoạt động dịch vụ MySQL sẽ mang tính chất vĩnh viễn cứ mỗi lần dịch vụ MySQL khởi động lại sẽ load các cấu hình trong file.

# vi /etc/my.cnf
[mysqld]

...

### Slow Query Log Configuration ###
### Only Avaiable on MySQL v5.6  ###
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/server.x.x.x.x.slow_queries.log
long_query_time = 1
log_output = FILE

...

 
Diễn giải giá trị cấu hình
+ long_query_time = [value] :
– Giá trị này sẽ quy định rằng nếu 1 query tốn nhiều thời gian để thực thi hơn số thời gian mà mình quy định ở phần cấu hình này thì MySQL sẽ ghi log lại thông tin liên quan đến query đó. Ở đây mình để nó là số “1“, nên cũng gần như là ghi lại hết các slow query tốn thời gian thực thi hơn 1 giây. Mặc định là giá trị “10” tức 10 giây ấy.

+ slow_query_log = [0/1]
– Nếu giá trị là “0” thì là tắt tính năng log slow query, còn “1” là kích hoạt chức năng này. Mặc định là MySQL tắt tính năng này đó nhé.

+ slow_query_log_file = file_name
– Giá trị này quy định tên của file log sẽ được lưu vào file đó, file này sẽ được tạo tại directory data của MySQL trừ khi bạn đưa ra đường dẫn tuyệt đối đến thư mục khác. Mặc định nếu không thay đổi thì tên của file log slow_query sẽ là “host_name-slow.log”.

+ log_output = [FILE|TABLES|NONE]
– Cấu hình này là nhằm chỉ định loại log mà chúng ta sẽ lưu thông tin xuống, cụ thể là file hay 1 table trên CSDL của dịch vụ MySQL. Thông thường thì mình sẽ chỉ định rõ là “FILE” vì mình lưu slow query log xuống file trên ổ cứng. Nếu bạn cấu hình là “NONE” thì coi như sẽ không có bất kì thông tin log nào được ghi ra cả vì nó có biết loại đối tượng lưu trữ log slow query là gì đâu nào.
– “log_output” này cũng áp dụng chung cho cấu hình “general_log“.

Rồi khởi động lại dịch vụ hoặc reload MySQL.

# /etc/init.d/mysql restart

 
Lưu ý:
– Đối với 1 số hệ thống dịch vụ MySQL cũ từ 5.5 trở xuống, thì không có tồn tại cấu hình tên là “slow_query_log” do đã được đổi tên từ “log-slow-queries” sang mới. Nên nếu bạn cấu hình trên các hệ thống MySQL cũ thì sẽ dùng tên cấu hình là :

log-slow-queries = 1

 

Cấu hình “slow query” log không cần khởi động lại dịch vụ MySQL

Giả dụ bạn đang cần debug hoạt động MySQL và muốn bật tính năng lưu log với slow query mà không cần khởi động lại dịch vụ thì ta có thể cấu hình thông qua MySQL command-line. Không cần bất kì thao tác cấu hình với file “my.cnf” và khởi động lại dịch vụ.

Đăng nhập MySQL command-line và thực hiện set các giá trị cấu hình GLOBAL tương ứng như sau:

# mysql -uroot -p
mysql> SET GLOBAL slow_query_log_file = '/var/lib/mysql/server.x.x.x.x.slow_queries.log';
mysql> SET GLOBAL long_query_time = 1; 
mysql> SET GLOBAL slow_query_log = 1;
mysql> FLUSH LOGS;

 
Kiểm tra lại các giá trị được cấu hình phù hợp chưa.

mysql> SHOW GLOBAL VARIABLES LIKE 'slow\_%';
+---------------------+-----------------------------------------------------+
| Variable_name       | Value                                               |
+---------------------+-----------------------------------------------------+
| slow_query_log      | ON                                                  |
| slow_query_log_file | /var/lib/mysql/server.x.x.x.x.slow_queries.log      |
+---------------------+-----------------------------------------------------+

mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 1.000000  |
+-----------------+-----------+

 
Chỉ cần như vậy là xong rồi. Chúc các bạn thành công.

Previous article[DirectAdmin] Fix lỗi “RoundCube: Could not save new password. Can’t create socket connection to tcp://localhost:2222”
Next article[MySQL] Hướng dẫn cấu hình đăng nhập MySQL console không cần nhập user-pass
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !