performance_schema
监控查询MySQL 提供了一个叫做 performance_schema
的功能,它能够收集各种性能相关的数据,包括查询的执行情况。你可以通过查询这个模式中的相关表来统计用户的查询次数。
首先,你需要确保 performance_schema
已经启用。可以通过以下命令查看是否启用:
SHOW VARIABLES LIKE 'performance_schema';
如果它没有启用,你可能需要在 MySQL 启动时启用它,或者调整 MySQL 配置文件并重启 MySQL 服务。
使用 performance_schema
中的 events_statements_summary_by_user_by_event_name
表来查看每个用户的查询统计信息。以下是一个查询示例:
SELECT
USER,
COUNT_STAR AS query_count
FROM
performance_schema.events_statements_summary_by_user_by_event_name
WHERE
EVENT_NAME ='statement/sql/select'-- 或者其他你感兴趣的语句类型
GROUPBY
USER
ORDERBY
query_count DESC;
USER
:表示执行 SQL 语句的用户。COUNT_STAR
:表示该用户执行的 SQL 语句总次数。你可以根据需要调整 EVENT_NAME
来筛选不同类型的 SQL 语句(例如 statement/sql/select
对应 SELECT
语句)。
你也可以通过启用 MySQL 的通用查询日志来记录所有的 SQL 语句,然后分析日志文件来统计每个用户的查询次数。
首先,启用查询日志:
SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'TABLE'; -- 将日志输出到表中
启用后,查询日志会被存储在 mysql.general_log
表中。你可以通过以下 SQL 查询来统计每个用户的查询次数:
SELECT
USER,
COUNT(*) AS query_count
FROM
mysql.general_log
WHERE
COMMAND_TYPE ='Query'
GROUPBY
USER
ORDERBY
query_count DESC;
这种方法可能会对性能产生一定影响,尤其是在高负载的生产环境中,因此应谨慎使用,特别是在数据库负载较高的情况下。
MySQL 企业版提供了审计插件,允许你记录详细的操作信息,包括每个用户的查询记录。通过这些审计日志,你可以查看每个用户执行的 SQL 语句及其次数。
在开源版 MySQL 中,类似的功能可以通过第三方插件(如 audit-plugin
)实现,但这需要安装和配置这些插件。
备注:审计插件也有很多开源的
SHOW STATUS
命令查看全局查询计数虽然这不是按用户的查询次数统计,但你可以使用 SHOW STATUS
查看数据库的全局查询计数:
SHOW GLOBAL STATUS LIKE 'Questions';
这个命令返回的 Questions
表示从数据库启动以来的查询总数,但它无法按用户划分。
1、使用 performance_schema
,因为它不需要额外的日志文件,并且能实时提供查询数据,最方便。
2、开启General Query Log
,这个对性能有影响,并且会产生大量日志,一般排查问题才开启。
3、使用 MySQL Enterprise Audit
,需要自行安装。一般默认是不安装的。