Cấu hình log slow query trên dịch vụ MySQL

  • Wednesday 09/09/2020

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

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

### 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.

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