Günlük MySQL sorguları nasıl belirlenir?


15

MySQL'den NoSQL DBaaS'a büyük geçiş araştırıyorum ve masrafları tahmin etmeye çalışırken bir sorunla karşılaştım. Esasen, 100 PUT, POST ve DELETE başına 0,015 $ ve 500 GET başına 0,015 $ alan Cloudant ile kullanacağım istek sayısını denemek ve tahmin etmek için mevcut MySQL sunucumun günde kaç sorgu işlediğini anlayamıyorum. ve KAFALAR.

MySQL'in kendi başına topladığı istatistikleri almak için SHOW STATUS ve SHOW GLOBAL STATUS kullanma hakkında birçok bilgi buldum , ancak zaman aralığı referansı yok.

Örneğin, GÖSTER GLOBAL DURUMU aşağıdakileri döndürür:

Queries                           | 13576675

Bu harika, ancak bu sayıyı saran zaman dilimi hakkında hiçbir fikrim yok. 13 milyon sorgu ne zaman? Her ay? Yıl? Zamanın başlangıcından beri?

MySQL belgeleri gerçekten fazla ayrıntı vermez:

Sorguları

Sunucu tarafından yürütülen deyimlerin sayısı. Bu değişken, Sorular değişkeninden farklı olarak, saklanan programlar içinde yürütülen ifadeleri içerir. COM_PING veya COM_STATISTICS komutlarını saymaz. Bu değişken MySQL 5.0.76'ya eklendi.

Herhangi bir yardım için şimdiden teşekkürler.


2
Genel Queriesdurum değişkeni, sunucu en son başlatıldığından beri her şeyi sayıyor ... SHOW STATUS LIKE 'Uptime';saniyeler önce. Birçok durum değişkeni ile silinir, FLUSH STATUS;ancak Queriesen azından MySQL 5.5.19 ve 5.6.14 olan test sunucularında bunu doğruladım.
Michael - sqlbot

Yanıtlar:


15

SELECT'ler için:

show global status like "Com_select";

UPDATE'ler:

show global status like "Com_update";

ınsert'ler:

show global status like "Com_insert";

silmeleri:

show global status like "Com_delete";

ALl değerleri MySQL'in son yeniden başlatılmasından bu yana "kümülatif" tir.

SELECT'lerinizi bir saat içinde almak için:

Akşam saat 9'da:

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

Saat 10'da:

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

Son bir saat içinde SELECT sayısı: 672363 - 671664 = 699

Saygılarımla


Teşekkürler @mfouilleul, bu yardımcı olur. Bunu var süresi ile birleştirip sorguların hacmini anlatacağım.
AJB

1
Sadece açıklığa kavuşturmak için, show global status like 'Com_%';komutlar tüm sunucu içindir, değil mi? Paylaşılan bir çevrede alternatif ne olabilir - örneğin: max_questions/ max Saat Başına Sorgu (QPH) ' dan ne kadar uzakta olduğumuzu tahmin etmek .
Fabien Snauwaert

9

Bu görünümü saniye, dakika, saat ve gün başına sorgu sayısını takip etmek için kullanıyorum:

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

Örnek çıktı:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.