2016-05-23 54 views
0

我知道你可以在MySQL服務器中記錄所有執行的查詢。有什麼方法可以記錄他們的響應時間(MySQl服務器用來執行查詢的時間)?我想定期檢查MySQL服務器中每個數據庫的所有響應時間。 例如:如何在MySQL中記錄查詢響應時間?

SELECT response_time FROM rt_log_table where db_name = 'dbName'; 

P.S.我無法在客戶端應用程序中插入代碼。如果有一種工具可以幫助我,我可以附加到客戶端。

非常感謝你,

+0

哪個反應?從客戶端或唯一的服務器。注意查詢 - 從表中選擇*;可以有不同的響應時間是表格有3行或3000.000行。所以你也計算網絡流量 –

+0

這是MySQL服務器執行查詢的時間。 –

回答

3

可以使用MySQL的性能方案,要做到這一點(和更多),請參閱如何配置它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

您可以使用microtime中()獲得響應時間,那麼也許插入到數據庫來存儲。 例如

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

您可以存儲$milliseconds 我希望這個作品:-)

+0

對不起,我忘了在問題中提到,但我不能像這樣在客戶端插入代碼。謝謝。 –