วิธีการกำหนดแบบสอบถาม MySQL ต่อวัน?


15

ฉันกำลังตรวจสอบสวิตช์ขนาดใหญ่จาก MySQL เป็น NoSQL DBaaS และฉันพบปัญหาในการพยายามคาดการณ์ค่าใช้จ่าย โดยพื้นฐานแล้วฉันไม่สามารถค้นหาจำนวนเซิร์ฟเวอร์ MySQL ปัจจุบันที่ฉันจัดการต่อวันเพื่อลองและประเมินจำนวนคำขอที่ฉันจะใช้กับCloudantซึ่งคิดค่าบริการ $ 0.015 ต่อ 100 PUTs , POSTsและDELETEsและ $ 0.015 ต่อ 500 GETs และหัว

ฉันพบข้อมูลจำนวนมากเกี่ยวกับการใช้สถานะ SHOWและSHOW GLOBAL STATUSเพื่อรับสถิติที่ MySQL รวบรวมไว้ในตัวของมันเอง แต่ไม่มีการอ้างอิงกรอบเวลา

ตัวอย่างเช่น SHOW GLOBAL STATUS ส่งคืนค่าต่อไปนี้:

Queries                           | 13576675

เป็นสิ่งที่ดีมากยกเว้นฉันไม่รู้ว่ากรอบเวลาที่ตัดจำนวนนั้น 13 ล้านคำค้นหาเมื่อไหร่? ต่อเดือน? ปี? ตั้งแต่จุดเริ่มต้นของเวลา?

เอกสาร MySQL ไม่ได้อธิบายรายละเอียดมากเกินไป:

แบบสอบถาม

จำนวนงบที่ดำเนินการโดยเซิร์ฟเวอร์ ตัวแปรนี้รวมคำสั่งที่เรียกใช้ภายในโปรแกรมที่เก็บไว้ซึ่งแตกต่างจากตัวแปรคำถาม มันไม่นับคำสั่ง COM_PING หรือ COM_STATISTICS ตัวแปรนี้ถูกเพิ่มเข้ามาใน MySQL 5.0.76

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือใด ๆ


2
Queriesตัวแปรสถานะทั่วโลกจะนับทุกอย่างตั้งแต่เซิร์ฟเวอร์ถูกเริ่มต้นที่ผ่านมา ... ซึ่งเป็นSHOW STATUS LIKE 'Uptime';วินาทีที่ผ่านมา ตัวแปรสถานะจำนวนมากถูกล้างออกด้วยFLUSH STATUS;แต่Queriesอย่างน้อยในเซิร์ฟเวอร์ทดสอบที่ฉันยืนยันในตอนนี้ซึ่งก็คือ MySQL 5.5.19 และ 5.6.14
Michael - sqlbot

คำตอบ:


15

สำหรับ SELECTs:

show global status like "Com_select";

ปรับปรุง:

show global status like "Com_update";

แทรก:

show global status like "Com_insert";

จะลบ:

show global status like "Com_delete";

ค่า ALl คือ "cumulativ" ตั้งแต่ MySQL รีสตาร์ทครั้งล่าสุด

ดังนั้นการเลือก SELECT ของคุณในหนึ่งชั่วโมง:

เวลา 21.00 น.:

[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)

เวลา 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)

จำนวน SELECT ในชั่วโมงที่ผ่านมา: 672363 - 671664 = 699

ขอแสดงความนับถืออย่างสูง


ขอบคุณ @mfouilleul สิ่งนี้มีประโยชน์ ฉันจะรวมสิ่งนี้กับช่วงเวลาและหาปริมาณของข้อความค้นหา
AJB

1
เพียงเพื่อชี้แจงshow global status like 'Com_%';คำสั่งสำหรับเซิร์ฟเวอร์ทั้งหมดใช่มั้ย สิ่งที่เป็นทางเลือกที่จะอยู่ในสภาพแวดล้อมที่ใช้ร่วมกัน - เช่นการประเมินว่าเรามาจากmax_questions/ สูงสุดแบบสอบถามต่อชั่วโมง (QPH) ถูกตี
Fabien Snauwaert

9

ฉันใช้มุมมองนี้เพื่อจับตาดูจำนวนการค้นหาต่อวินาทีนาทีชั่วโมงและวัน:

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');

ตัวอย่างผลลัพธ์:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.