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,需要自行安装。一般默认是不安装的。