प्रति दिन MySQL के प्रश्नों का निर्धारण कैसे करें?


15

मैं MySQL से NoSQL DBaaS के बड़े स्विच की जांच कर रहा हूं और मैं खर्चों की भविष्यवाणी करने की कोशिश में एक समस्या में चला गया हूं। अनिवार्य रूप से, मैं यह पता नहीं लगा सकता कि मेरे वर्तमान MySQL सर्वर ने मेकओवर के साथ मेरे द्वारा उपयोग किए जाने वाले अनुरोधों की संख्या का अनुमान लगाने के लिए प्रति दिन कितने प्रश्नों को हैंडल किया है , जो प्रति 100 PUTs, POST और DELETE और $ 0.015 प्रति 500 ​​GETs पर 0.015 डॉलर का शुल्क लेता है। और हेड्स।

मैंने MySQL को खुद इकट्ठा करने वाले आँकड़े प्राप्त करने के लिए SHOW STATUS और SHOW GLOBAL STATUS का उपयोग करने के बारे में बहुत सारी जानकारी प्राप्त की है, लेकिन कोई समय-सीमा संदर्भ नहीं है।

उदाहरण के लिए, 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 थे।
माइकल - sqlbot

जवाबों:


15

चयन के लिए:

show global status like "Com_select";

अपडेट:

show global status like "Com_update";

आवेषण:

show global status like "Com_insert";

हटाता है:

show global status like "Com_delete";

MySQL के अंतिम पुनरारंभ के बाद से ALL मान "क्यूमुलैटिव" हैं।

तो एक घंटे में अपने चयन प्राप्त करने के लिए:

9: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)

रात 10 बजे:

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

पिछले एक घंटे में चयन की संख्या: 672363 - 671664 = 699

सादर


धन्यवाद @mfouilleul, यह मददगार है। मैं इसे अवधि संस्करण के साथ संयोजित करने जा रहा हूं और प्रश्नों की मात्रा का पता लगाऊंगा।
AJB

1
बस स्पष्ट करने के लिए, show global status like 'Com_%';कमांड पूरे सर्वर के लिए हैं, है ना? एक साझा पर्यावरण में क्या विकल्प होगा - उदाहरण के लिए: अनुमान लगाने के लिए कि हम max_questionsप्रति घंटे / अधिकतम प्रश्न प्रति घंटे (QPH) से कितने दूर हैं ।
फेबिन स्नूवर्ट सेप

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.