2016-05-23 18 views
0

私は、実行されたすべてのクエリをMySQLサーバに記録できることを知っています。応答時間(MySQlサーバーがクエリを実行するのにかかった時間)を記録する方法はありますか? MySQLサーバーの各データベースのすべての応答時間を定期的にチェックしたいと思います。 例:MySQLでクエリ応答時間を記録するには?

SELECT response_time FROM rt_log_table where db_name = 'dbName'; 

P.S.クライアントアプリケーションにコードを挿入できません。それを手伝ってくれるツールがあれば、私はクライアントにアタッチすることができます。

あなたは、応答時間を取得し、その後、多分店にデータベースに挿入するのmicrotime()を使用することができ、非常に

+0

どの応答ですか?クライアントまたはサーバーのみから。クエリに注意してください - SELECT * from table;異なる応答時間を持つことができますテーブルは3行または3.000.000行があります。したがって、ネットワークトラフィックも計算します –

+0

これは、MySQLサーバーがクエリを実行するのに要した時間です。 –

答えて

3

:-)この作品を願ってい$milliseconds を保存することができ、それを設定する方法についてQuery Profiling Using Performance Schemaを参照してください。

通常、パフォーマンススキームはデフォルトで有効になっていますが、すべてのクエリを記録するにはクエリ履歴を有効にする必要があります。有効になると、クエリ期間はたとえば

mysql> SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT 
    -> FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like '%10001%'; 
+----------+----------+--------------------------------------------------------+ 
| event_id | duration | sql_text            | 
+----------+----------+--------------------------------------------------------+ 
|  31 | 0.028310 | SELECT * FROM employees.employees WHERE emp_no = 10001 | 
+----------+----------+--------------------------------------------------------+ 

ログのサイズは限られているため、定期的にクエリを実行して保存したい場合は、そのデータを別のテーブルに保存する必要があります。ロギングは通常パフォーマンスにほとんど影響を与えませんが、必要なものだけを有効にしたい場合もあります。

0

、ありがとうございました。 例

<?php 
$sql = ....; 
$time = microtime(true); 
mysqli_query($conn,$sql); 
$diff = microtime(true)-$time; 
$milliseconds = $diff * 1000; 

のためにあなたは、私はあなたが(とはるかに)ことを行うにはMySQLのパフォーマンススキームを使用することができます

+0

申し訳ありませんが、質問に言及するのを忘れましたが、そのようなクライアントにコードを挿入することはできません。ありがとうございました。 –

関連する問題