Làm thế nào để xác định truy vấn MySQL mỗi ngày?


15

Tôi đang điều tra sự chuyển đổi lớn từ MySQL sang Noaa DBaaS và tôi gặp phải một vấn đề khi cố gắng dự báo chi phí. Về cơ bản, tôi không thể tìm ra có bao nhiêu truy vấn mà máy chủ MySQL hiện tại của tôi xử lý mỗi ngày để thử và ước tính số lượng yêu cầu tôi sẽ sử dụng với Cloudant , tính phí 0,015 đô la cho 100 PUT, POST, và XÓA và 0,015 đô la cho mỗi 500 GET và các đầu.

Tôi đã tìm thấy rất nhiều thông tin về việc sử dụng SHOW STATUSSHOW GLOBAL STATUS để lấy số liệu thống kê mà MySQL thu thập trên chính nó, nhưng không có tham chiếu khung thời gian.

Chẳng hạn, SHOW GLOBAL STATUS trả về như sau:

Queries                           | 13576675

Điều này thật tuyệt, ngoại trừ tôi không biết khung thời gian bao bọc con số đó. 13 triệu truy vấn khi nào? Mỗi tháng? Năm? Kế từ khi bắt đầu thời gian?

Các tài liệu MySQL không thực sự xây dựng quá nhiều:

Truy vấn

Số lượng câu lệnh được thực hiện 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ữ, không giống như biến Câu hỏi. Nó không tính các lệnh COM_PING hoặc COM_STATISTICS. Biến này đã được thêm vào trong MySQL 5.0.76.

Cảm ơn trước sự giúp đỡ nào.


2
Các Queriesbiến tình trạng toàn cầu đang đếm tất cả mọi thứ kể từ khi máy chủ được bắt đầu cuối cùng ... đó là SHOW STATUS LIKE 'Uptime';giây. Nhiều biến trạng thái được xóa bằng FLUSH STATUS;nhưng Querieskhông, ít nhất là trong các máy chủ thử nghiệm mà tôi đã xác nhận nó ngay bây giờ, đó là MySQL 5.5.19 và 5.6.14.
Michael - sqlbot

Câu trả lời:


15

Đối với CHỌN:

show global status like "Com_select";

CẬP NHẬT:

show global status like "Com_update";

CHỨNG MINH:

show global status like "Com_insert";

XÓA

show global status like "Com_delete";

Giá trị ALl là "cumulativ" kể từ lần khởi động lại cuối cùng của MySQL.

Vì vậy, để có được CHỌN của bạn trong một giờ:

Vào lúc 9h tối:

[21:00:00] [DEV\(none)] mysql> show global status like "Com_select";
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Com_select    | 671664 |
+---------------+--------+
1 row in set (0.00 sec)

Tại 22:00:

[22:00:00] [DEV\(none)] mysql> show global status like "Com_select";
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Com_select    | 672363 |
+---------------+--------+
1 row in set (0.00 sec)

Số lượng CHỌN trong giờ qua: 672363 - 671664 = 699

Trân trọng


Cảm ơn @mfouilleul, điều này rất hữu ích. Tôi sẽ kết hợp điều này với var thời lượng và tìm ra khối lượng truy vấn.
AJB

1
Chỉ cần làm rõ, show global status like 'Com_%';các lệnh là cho toàn bộ máy chủ, phải không? Điều gì sẽ thay thế trong một môi trường được chia sẻ - ví dụ: để ước tính khoảng cách chúng ta đến từ max_questions/ Truy vấn tối đa mỗi giờ (QPH).
Fabien Snauwaert

9

Tôi sử dụng chế độ xem này để theo dõi số lượng truy vấn mỗi giây, phút, giờ và ngày:

create or replace view _dba_query_stats as
select 
  SUBSTRING(VARIABLE_NAME, 5) as query_type, 
  VARIABLE_VALUE as total_count, 
  round(VARIABLE_VALUE / ( select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status'), 2) as per_second,
  round(VARIABLE_VALUE / ((select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status') / (60)))       as per_minute,
  round(VARIABLE_VALUE / ((select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status') / (60*60)))    as per_hour, 
  round(VARIABLE_VALUE / ((select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status') / (60*60*24))) as per_day,
  FROM_UNIXTIME(round(UNIX_TIMESTAMP(sysdate()) - (select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status'))) report_period_start,
  sysdate() as report_period_end,
  TIME_FORMAT(SEC_TO_TIME((select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Uptime_since_flush_status')),'%Hh %im') as report_period_duration
from 
  information_schema.GLOBAL_STATUS 
where 
  VARIABLE_NAME in ('Com_select', 'Com_delete', 'Com_update', 'Com_insert');

Đầu ra mẫu:

query_type total_count per_second per_minute per_hour per_day report_period_start report_period_end   report_period_duration
DELETE               0          0          0       0        0 2017-04-16 03:46    2017-04-20 22:14:56 114h 28m
INSERT           36595       0.09          5     320     7672 2017-04-16 03:46    2017-04-20 22:14:56 114h 28m
SELECT        14842019      36.02       2161  129656  3111738 2017-04-16 03:46    2017-04-20 22:14:56 114h 28m
UPDATE          189137       0.46         28    1652    39654 2017-04-16 03:46    2017-04-20 22:14:56 114h 28m
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.