Hướng dẫn mysql slow query log - nhật ký truy vấn chậm mysql

  • Techblog
  • Development

Hướng dẫn mysql slow query log - nhật ký truy vấn chậm mysql

Bài viết hôm nay Bizfly Cloud sẽ hướng dẫn bạn cách cấu hình slow query log trên MySQL. Bạn có thể sử dụng slow query log để xác định truy vấn cơ sở dữ liệu nào đang ngốn nhiều thời gian để hoạt động.Bizfly Cloud sẽ hướng dẫn bạn cách cấu hình slow query log trên MySQL. Bạn có thể sử dụng slow query log để xác định truy vấn cơ sở dữ liệu nào đang ngốn nhiều thời gian để hoạt động.

Điều kiện tiên quyết: Bạn phải có quyền truy cập root vào máy chủ để làm thực hiện các bước sau. 

1. Đăng nhập vào server bằng SSH.

2. Tại command line, gõ lệnh sau:

mysql -u root -p

3. Gõ MySQL root password

4. Để bật slow query log, gõ lệnh sau tại dấu nhắc mysql>:

SET GLOBAL slow_query_log = 'ON';

5. Có các tùy chọn bổ sung mà bạn có thể đặt cho nhật ký truy vấn chậm:

- Theo mặc định, khi nhật ký truy vấn chậm được kích hoạt, slow query log sẽ ghi lại bất kỳ truy vấn nào mất hơn 10s để xử lý. 

Để thay đổi khoảng thời gian này, hãy gõ lệnh sau, thay thế X bằng thời gian tính bằng giây:

SET GLOBAL long_query_time = X;

- Theo mặc định, tệp nhật ký truy vấn chậm được đặt tại /var/lib/mysql/hostname-slow.log. Để thay đổi đường dẫn hoặc filename, hãy nhập lệnh sau, thay thế đường dẫn bằng đường dẫn đến tệp và filename bằng tên của log filename:

SET GLOBAL slow_query_log_file = '/path/filename';

6. Để xác minh rằng slow query log hoạt động chính xác, hãy đăng xuất khỏi chương trình mysql và sau đó đăng nhập lại. (Điều này sẽ tải lại các biến phiên cho chương trình mysql.) 

Nhập lệnh sau, thay thế X bằng một giá trị lớn hơn cài đặt long_query_time:long_query_time:

SELECT SLEEP(X);

Tệp slow query log nên chứa thông tin về truy vấn.

7. Tiếp tục theo dõi slow query log file để xem truy vấn nào mất nhiều thời gian thwucj thi.

8. Khi bạn hoàn tất troubleshooting, hãy tắt slow query log. Để thực hiện điều này, hãy chạy lại chương trình mysql, rồi gõ lệnh sau:

SET GLOBAL slow_query_log = 'OFF';

Lưu ý:

Bạn chỉ nên bật slow query log khi cần khắc phục sự cố về hiệu suất.

Hướng dẫn mysql slow query log - nhật ký truy vấn chậm mysql

Tham khảo: a2hosting.com/kb/developer-corner/mysql/enabling-the-slow-query-log-in-mysql

GIANG

>> Có thể bạn quan tâm: SQL là gì? Những thông tin về ngôn ngữ SQL bạn nên biết

BizFly Cloud là nhà cung cấp dịch vụ điện toán đám mây với chi phí thấp, được vận hành bởi VCCorp. là nhà cung cấp dịch vụ điện toán đám mây với chi phí thấp, được vận hành bởi VCCorp.

BizFly Cloud là một trong 4 doanh nghiệp nòng cốt trong "Chiến dịch thúc đẩy chuyển đổi số bằng công nghệ điện toán đám mây Việt Nam" của Bộ TT&TT; đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật của nền tảng điện toán đám mây phục vụ Chính phủ điện tử/chính quyền điện tử.

Độc giả quan tâm đến các giải pháp của BizFly Cloud có thể truy cập tại đây.tại đây.

DÙNG THỬ MIỄN PHÍ và NHẬN ƯU ĐÃI 3 THÁNG tại: Manage.bizflycloudManage.bizflycloud

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ả.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. 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.
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 = [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”.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“.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à :
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ụ.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: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.
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.
Chỉ cần như vậy là xong rồi. Chúc các bạn thành công.