Bạn Tìm Gì Hôm Nay ...?
Tất cả đều có chỉ trong 1 nốt nhạc !
Nếu cần hỗ trợ chi tiết gọi 1900 9477
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.
|
/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
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 |