1日あたりのMySQLクエリの決定方法


15

私はMySQLからNoSQL DBaaSへの大きな切り替えを調査しており、費用を予測しようとする問題に遭遇しました。本質的に、Cloudantで使用するリクエストの数を試して推定するために、現在のMySQLサーバーが1日に処理するクエリの数を把握することはできません。とHEADs。

SHOW STATUSおよびSHOW GLOBAL STATUSを使用して、MySQLがそれ自体で収集する統計を取得することに関する多くの情報を見つけましたが、時間枠の参照はありません。

たとえば、SHOW GLOBAL STATUSは次を返します。

Queries                           | 13576675

これは素晴らしいことです。ただし、その数値をラップする時間枠がわからないという点が異なります。1300万件のクエリ 月ごと?年?時間の始まりから?

MySQLのドキュメントはあまり詳しく説明していません。

問い合わせ

サーバーによって実行されたステートメントの数。この変数には、Questions変数とは異なり、ストアドプログラム内で実行されるステートメントが含まれます。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 14年

回答:


15

SELECTの場合:

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が最後に再起動してからのAL1値は「累積」です。

1時間でSELECTを取得するには:

午後9時:

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

過去1時間のSELECTの数:672363-671664 = 699

宜しくお願いします


@mfouilleulに感謝、これは役に立ちます。これを期間変数と組み合わせて、クエリの量を計算します。
AJB 14年

1
明確にするために、show global status like 'Com_%';コマンドはサーバー全体用ですよね?共有環境ではどのような代替手段がありますか。たとえばmax_questions、ヒットしている時間あたりの最大クエリ数(QPH)からの距離を推定します。
ファビアンスナウワート

9

このビューを使用して、1秒、1分、1時間、1日あたりのクエリ数を監視します。

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.