MySQL数据,查询QPS,TPS数据方式
作者:会飞的土拨鼠呀
文章详细介绍了查询MySQL数据库QPS和TPS的方法和工具,包括直接通过命令行、PerformanceSchema、mysqladmin、Prometheus、自动化脚本等,同时,还提供了优化建议,如索引优化、SQL调优、事务控制和配置调优
以下是针对 MySQL 数据库 QPS(Queries Per Second)和 TPS(Transactions Per Second)数据 的详细查询方法和工具推荐,包含具体命令和示例:
一、直接通过 MySQL 命令行查询
1. 查询 QPS
-- 获取当前总查询次数(所有类型) SHOW STATUS LIKE 'Queries'; -- 计算过去 N 秒的 QPS(例如 N=5) SELECT (NOW() - INTERVAL 5 SECOND) AS 时间差, (SHOW STATUS LIKE 'Queries') - prev_queries AS 当前查询总数, ROUND((当前查询总数 / 时间差.total_seconds), 2) AS QPS FROM (SELECT SHOW STATUS LIKE 'Queries' AS prev_queries) AS subquery, (SELECT NOW() - INTERVAL 5 SECOND AS time_diff) AS time_diff;
2. 查询 TPS
-- 获取当前事务提交次数 SHOW STATUS LIKE 'Com_commit'; -- 计算过去 N 秒的 TPS(例如 N=5) SELECT (NOW() - INTERVAL 5 SECOND) AS 时间差, (SHOW STATUS LIKE 'Com_commit') - prev_commits AS 当前提交总数, ROUND((当前提交总数 / 时间差.total_seconds), 2) AS TPS FROM (SELECT SHOW STATUS LIKE 'Com_commit' AS prev_commits) AS subquery, (SELECT NOW() - INTERVAL 5 SECOND AS time_diff) AS time_diff;
二、使用 Performance Schema(推荐)
1. 启用 Performance Schema
-- 检查是否已启用 SHOW VARIABLES LIKE 'performance_schema'; -- 若未启用,在 `my.cnf` 中添加: [mysqld] performance_schema = ON
2. 查询 QPS(按语句类型统计)
SELECT event_name AS 查询类型, COUNT_STAR AS 总执行次数, AVG_TIMER_WAIT AS 平均延迟(微秒), SUM_TIMER_WAIT AS 总延迟(微秒) FROM performance_schema.events_statements_summary_by_digest WHERE event_name IN ('SELECT', 'INSERT', 'UPDATE', 'DELETE') ORDER BY COUNT_STAR DESC;
3. 查询 TPS(按事务提交统计)
SELECT event_name AS 事务类型, COUNT_STAR AS 提交次数, AVG_TIMER_WAIT AS 平均延迟(微秒) FROM performance_schema.events_statements_summary_by_digest WHERE event_name = 'COMMIT';
三、使用 mysqladmin 工具
1. 查看实时状态
# 查看所有关键状态变量(包含 QPS 和 TPS) mysqladmin -u root -p status # 仅查看 QPS、TPS 和连接数 mysqladmin -u root -p extended-status | grep -E 'Queries|Com_commit|Threads_connected'
四、使用 Prometheus + mysql_exporter
1. 部署 mysql_exporter
# 下载并运行 mysql_exporter wget https://github.com/prometheus/mysqld_exporter/releases/download/v1.16.0/mysqld_exporter-1.16.0.linux-amd64.tar.gz tar xvfz mysqld_exporter-*.tar.gz cd mysqld_exporter-*/ ./mysqld_exporter # Prometheus 配置(`prometheus.yml`) scrape_configs: - job_name: 'mysql' static_configs: - targets: ['localhost:9104']
2. 查询 QPS 和 TPS
# QPS:所有查询速率(每秒执行次数) rate(mysql_statements_total{statement_type=~"SELECT|INSERT|UPDATE|DELETE"}[5m]) # TPS:事务提交速率(每秒提交次数) rate(mysql_statements_total{statement_type="COMMIT"}[5m])
3. 可视化仪表盘
- 在 Grafana 中添加 MySQL 监控面板,展示实时 QPS、TPS、慢查询等指标。
五、自动化脚本(Python 示例)
import mysql.connector import time def get_mysql_stats(host, user, password, db): conn = mysql.connector.connect( host=host, user=user, password=password, database=db ) cursor = conn.cursor() # 查询 QPS cursor.execute("SHOW STATUS LIKE 'Queries'") queries_total = int(cursor.fetchone()[1]) # 查询 TPS cursor.execute("SHOW STATUS LIKE 'Com_commit'") commits_total = int(cursor.fetchone()[1]) cursor.close() conn.close() return queries_total, commits_total if __name__ == "__main__": host = 'localhost' user = 'root' password = 'password' db = 'test' prev_queries, prev_commits = get_mysql_stats(host, user, password, db) while True: time.sleep(5) current_queries, current_commits = get_mysql_stats(host, user, password, db) qps = (current_queries - prev_queries) / 5 tps = (current_commits - prev_commits) / 5 print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] QPS={qps:.2f}, TPS={tps:.2f}") prev_queries, prev_commits = current_queries, current_commits
六、其他工具
1. Percona Toolkit 的 pt-query-digest
# 分析慢查询日志并统计 QPS/TPS pt-query-digest --slow-log=/var/log/mysql/slow.log --output=report
2. MySQL Workbench 的监控面板
- 打开 Server Status 选项卡,直接查看 Queries per second 和 Transactions per second。
七、优化建议
- 索引优化:缺失索引会导致全表扫描,显著降低 QPS。
- SQL 调优:避免复杂子查询,使用
EXPLAIN
分析执行计划。 - 事务控制:减少长事务占用锁资源,适当调整隔离级别。
- 配置调优:修改
innodb_buffer_pool_size
、query_cache_size
等参数。
总结
- 轻量级监控:直接使用
SHOW STATUS
或mysqladmin
。 - 精细化分析:启用
Performance Schema
或集成 Prometheus。 - 长期优化:结合慢查询日志和索引分析工具(如
EXPLAIN
)提升性能。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。