回答:
なぜ私はそのような警告を出していますか???
2011年8月に私はServerFaultに投稿し、10億クエリを24日間で実行する方法を説明しました。
これがその投稿全体です:
MySQLはクエリを内部的に呼び出します。実際、MySQLで行うほとんどすべてのことはクエリです。
一般ログまたはスロークエリログをオンにすると、mysqldが行うすべてのことが記録されます。
あなたが持っている場合は--log-クエリ- - -インデックスを使用していないが、すべてが遅いログにインデックスの土地を含まない、有効。
次のクエリを実行するとします。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| annarbor |
| dude |
| example |
| garbage |
| lovesh |
| mysql |
| performance_schema |
| replagdb |
| stuff |
| test |
| tostinni |
| wordpress |
| zipcodes |
+--------------------+
14 rows in set (0.06 sec)
はい、データベースを表示します。クエリです。実際、どのようなinformation_schemaに相当しますか???
mysql> select schema_name "Database" from information_schema.schemata;
+--------------------+
| Database |
+--------------------+
| information_schema |
| annarbor |
| dude |
| example |
| garbage |
| lovesh |
| mysql |
| performance_schema |
| replagdb |
| stuff |
| test |
| tostinni |
| wordpress |
| zipcodes |
+--------------------+
14 rows in set (0.08 sec)
テーブルinformation_schema.schemataにはインデックスがありますか???
mysql> show create table information_schema.schemata\G
*************************** 1. row ***************************
Table: SCHEMATA
Create Table: CREATE TEMPORARY TABLE `SCHEMATA` (
`CATALOG_NAME` varchar(512) NOT NULL DEFAULT '',
`SCHEMA_NAME` varchar(64) NOT NULL DEFAULT '',
`DEFAULT_CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',
`DEFAULT_COLLATION_NAME` varchar(32) NOT NULL DEFAULT '',
`SQL_PATH` varchar(512) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
いいえ、違います。したがって、SHOW DATABASES; 一般的なログと遅いログに記録されます(--log-queries-not-using-indexesが有効になっている場合)
したがって、クエリを構成するとは思わない多くの操作は、単なるクエリであり、mysqldの内部にある可能性があります。
mysqldに接続されている監視ツールを使用している場合は、クエリの数も増えます。
例:
mysql> show global status like 'uptime'; select * from information_schema.global_status where variable_name='uptime';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime | 613 |
+---------------+-------+
1 row in set (0.00 sec)
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| UPTIME | 613 |
+---------------+----------------+
1 row in set (0.00 sec)
mysqldの稼働時間を取得するだけでクエリになります。内部的に、MySQLは実行中のクエリをどのようにカウントしますか?以下は、いくつかの光を当てるかもしれない2つのステータス変数です。
クエリ:サーバーによって実行されたステートメントの数。この変数には、Questions変数とは異なり、ストアドプログラム内で実行されるステートメントが含まれます。COM_PINGまたはCOM_STATISTICSコマンドはカウントされません。
質問:サーバーによって実行されたステートメントの数。これには、クエリ変数とは異なり、クライアントからサーバーに送信されたステートメントのみが含まれ、ストアドプログラム内で実行されたステートメントは含まれません。この変数は、COM_PING、COM_STATISTICS、COM_STMT_PREPARE、COM_STMT_CLOSE、またはCOM_STMT_RESETコマンドをカウントしません。
MySQLサーバーが監視されているかどうか心配する必要はありません。ステータス変数を呼び出す監視は、要求されたデータを取得するために内部的にクエリを実行しているためです。
24日間で10億は
監視されているMySQLインスタンスの場合、これらの数値はまったくフェッチされません。
MySQL Workbench、MySQL Administrator、またはphpMyAdminを使用している場合、これらの製品が生成または更新するページでは、これらの小さなステータスクエリが呼び出され、すばやく数値が実行されます。
サイトが実際に800万のクエリを実行する場合、100万リクエストあたりのI / Oレートは$ 0.10で、月額は$ 0.80(80セント)になります。1か月に10億のクエリを実行すると、$ 100.00になります。これらの数字が正しく表示されていることを確認し、CFOの横に座って書いてください。
1か月あたり8億回のクエリなので、月額$ 80.00です。
いいえ、1つのI / O操作は1つのクエリに相当しません。1つのクエリがクエリキャッシュによって処理された場合(そして運が良ければ)、IO操作が0になる場合や、複数のIO操作が発生する場合があります。テーブル、インデックス、クエリ、その他の詳細に応じて、おそらく数百、数千となるでしょう。
http://aws.amazon.com/ebs/は次のように述べています:
スタンダードボリュームのボリュームストレージは、リリースするまで、プロビジョニングした月あたりのGBで課金されます。標準ボリュームのボリュームI / Oは、ボリュームに対して行ったリクエストの数によって課金されます。IOSTATのようなプログラムを使用して、いつでもシステムの正確なI / O使用状況を測定できます。ただし、アプリケーションとオペレーティングシステムは異なるレベルのキャッシュを実行することが多いため、標準ボリュームの場合、すべてのI / Oをディスクに同期しない限り、アプリケーションで表示されるよりも少ない数のI / Oリクエストが請求書に表示されます。 。
iostatは低レベルのLinuxユーティリティであり、データベースクエリについて何も知りません。http://linux.die.net/man/1/iostat
上記の見積もりはEBSサービスに関するものですが、RDSはEC2とEBSに基づいているため、RDSでも同じことを意味すると確信しています。