Bagaimana cara menentukan permintaan MySQL per hari?

15

Saya sedang menyelidiki peralihan besar dari MySQL ke DBaaS NoSQL dan saya mengalami masalah saat mencoba memperkirakan biaya. Pada dasarnya, saya tidak tahu berapa banyak permintaan yang ditangani server MySQL saya saat ini per hari untuk mencoba dan memperkirakan jumlah permintaan yang akan saya gunakan dengan Cloudant , yang menagih $ 0,015 per 100 PUT, POST, dan HAPUS dan $ 0,015 per 500 GETs dan KEPALA.

Saya telah menemukan banyak informasi tentang penggunaan SHOW STATUS dan SHOW STATUS GLOBAL untuk mendapatkan statistik yang dikumpulkan oleh MySQL sendiri, tetapi tidak ada referensi jangka waktu.

Misalnya, SHOW STATUS GLOBAL mengembalikan yang berikut:

Queries                           | 13576675

Itu hebat, kecuali saya tidak tahu kerangka waktu yang membungkus nomor itu. 13 juta pertanyaan kapan? Per bulan? Tahun? Sejak awal waktu?

Dokumen MySQL tidak terlalu rumit:

Pertanyaan

Jumlah pernyataan yang dieksekusi oleh server. Variabel ini mencakup pernyataan yang dijalankan dalam program yang disimpan, tidak seperti variabel Pertanyaan. Itu tidak menghitung perintah COM_PING atau COM_STATISTICS. Variabel ini ditambahkan di MySQL 5.0.76.

Terima kasih sebelumnya atas bantuannya.

AJB
sumber
2
The Queriesvariabel Status global menghitung segala sesuatu karena server terakhir dimulai ... yang SHOW STATUS LIKE 'Uptime';detik yang lalu. Banyak variabel status yang dihapus FLUSH STATUS;tetapi Queriestidak, setidaknya di server pengujian saya mengonfirmasinya sekarang, yaitu MySQL 5.5.19 dan 5.6.14.
Michael - sqlbot

Jawaban:

15

Untuk SELECT:

show global status like "Com_select";

PEMBARUAN:

show global status like "Com_update";

MASUK:

show global status like "Com_insert";

HAPUS:

show global status like "Com_delete";

Nilai ALl adalah "cumulativ" sejak MySQL terakhir restart.

Jadi untuk mendapatkan SELECT Anda dalam satu jam:

Pukul 9 malam:

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

Pukul 10 malam:

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

Jumlah SELECT dalam satu jam terakhir: 672363 - 671664 = 699

Salam Hormat

Maxime Fouilleul
sumber
Terima kasih @mfouilleul, ini sangat membantu. Saya akan menggabungkan ini dengan durasi var dan mencari tahu volume pertanyaan.
AJB
1
Hanya untuk memperjelas, show global status like 'Com_%';perintah adalah untuk seluruh server, bukan? Apa yang akan menjadi alternatif dalam lingkungan bersama - misalnya: untuk memperkirakan seberapa jauh kita dari max_questions/ maks Permintaan Per Jam (QPH) dipukul.
Fabien Snauwaert
9

Saya menggunakan tampilan ini untuk mengawasi jumlah kueri per detik, menit, jam dan hari:

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

Output sampel:

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
Matty
sumber