当前位置: 代码网 > it编程>数据库>Mysql > MySQL数据,查询QPS,TPS数据方式

MySQL数据,查询QPS,TPS数据方式

2025年02月27日 Mysql 我要评论
以下是针对 mysql 数据库 qps(queries per second)和 tps(transactions per second)数据 的详细查询方法和工具推荐,包含具体命令和示例:一、直接通

以下是针对 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 secondtransactions per second

七、优化建议

  1. 索引优化:缺失索引会导致全表扫描,显著降低 qps。
  2. sql 调优:避免复杂子查询,使用 explain 分析执行计划。
  3. 事务控制:减少长事务占用锁资源,适当调整隔离级别。
  4. 配置调优:修改 innodb_buffer_pool_sizequery_cache_size 等参数。

总结

  • 轻量级监控:直接使用 show statusmysqladmin
  • 精细化分析:启用 performance schema 或集成 prometheus。
  • 长期优化:结合慢查询日志和索引分析工具(如 explain)提升性能。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com