MySQL có 2 biến trạng thái “Questions” và “Queries” khá giống nhau nhưng cũng hơi khác một chút, khiến nhiều người nhầm lẫn. Hướng dẫn ở đây nó có thể không dễ hiểu lắm:

- Query: Số lượng câu lệnh được thực thi bởi máy chủ. Biến này bao gồm các câu lệnh được thực thi trong các chương trình đã được lưu trữ và đang chạy trên máy chủ. Nó không tính các lệnh COM_PING hoặc COM_STATISTICS. 
- Question: Biến này chỉ bao gồm các câu lệnh do client gửi đến máy chủ chứ không phải các câu lệnh được thực thi trong các chương trình đã được lưu trữ trên máy chủ, không giống như biến Query. Biến này không tính các lệnh COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE hoặc COM_STMT_RESET.

Tóm lại nếu bạn không sử dụng các statements đã được chuẩn bị, sự khác biệt lớn giữa Questions và Queries đó là “Questions ” sẽ tính các statements called được lưu trữ như một statements duy nhất, còn “Queries” cũng sẽ đếm tất cả các statements được call bên trong các statements được lưu trữ.

Dường như cũng có sự khác biệt lớn hơn giữa chúng:

Chạy trên MySQL 5.6.17 đã tạo ra một kết nối mới mà chúng ta thấy :

mysql> show  status like "Questionss";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Questions     | 2     |
+---------------+-------+
1 row in set (0.00 sec)
 
mysql> show  status like "queries";
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| Queries       | 21241470 |
+---------------+----------+
1 row in set (0.00 sec)

Điều này cho chúng ta biết “Queries” là một biến trạng thái global, trong khi “Questionss” là một phiên (session) và có thể được sử dụng để xem có bao nhiêu statement đã được cấp phát cho máy chủ thông qua kết nối hiện tại.

Ngoài ra còn có một biến Questions global hiển thị số cho một máy chủ kể từ khi bắt đầu:

mysql> show  global status like "Questionss";
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| Questions     | 23375398 |
+---------------+----------+
1 row in set (0.00 sec)

Khi nói đến các giá trị global, cả “Queries” và “Questions” đều không được đặt lại khi FLUSH STATUS được gọi.

Tuy nhiên, những gì hướng dẫn không mô tả chi tiết là: Khi nào chính xác những bộ đếm đó được tăng lên? Điều này có vẻ không liên quan nhưng thực sự không phải vậy, đặc biệt nếu bạn đang để ý những giá trị đó và sử dụng chúng để chẩn đoán các sự cố hiệu năng MySQL bất thường.

Tuy nhiên, nếu bạn đếm các Queries khi chúng bắt đầu – khi số Queries vấn tăng đột biến trong giây nhất định có thể là do lưu lượng truy cập tăng đột biến và nếu bạn đo các Queries khi hoàn thành – các đột biến cũng có thể có nghĩa là một số tài nguyên quan trọng đã có sẵn cho phép nhiều Queries hoàn thành. Hãy nghĩ ví dụ về able-level locks hoặc row-level locks với Innodb là nguyên nhân rất phổ biến.

Để kiểm tra số lượng truy vấn bất thường đang chạy đồng thời và truy vấn đang cố gắng để hoàn thành, nhìn vào biến trạng thái threads_running là một ý tưởng tuyệt vời.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments