我知道您可以在MySQL服务器中记录所有已执行的查询。有什么方法可以记录他们的响应时间(MySQl服务器执行查询所花费的时间)?我想定期检查MySQL服务器中每个数据库的所有响应时间。 例如:
SELECT response_time FROM rt_log_table where db_name = 'dbName';
P.S。我无法在客户端应用程序中插入代码。如果有一个工具可以帮助我,我可以附加到客户端。
非常感谢,
答案 0 :(得分:5)
您可以使用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 |
+----------+----------+--------------------------------------------------------+
日志的大小有限,因此如果要保留日志,可能需要定期查询并将该数据保存到另一个表中。记录通常对性能没有太大影响,但您仍然可能只想启用所需的内容。
答案 1 :(得分:1)
您可以使用microtime()来获取响应时间,然后可以INSERT INTO数据库进行存储。 例如
<?php
$sql = ....;
$time = microtime(true);
mysqli_query($conn,$sql);
$diff = microtime(true)-$time;
$milliseconds = $diff * 1000;
您可以存储$milliseconds
我希望这有效: - )