MySQL數(shù)據(jù),查詢QPS,TPS數(shù)據(jù)方式
更新時(shí)間:2025年02月27日 09:29:37 作者:會(huì)飛的土撥鼠呀
文章詳細(xì)介紹了查詢MySQL數(shù)據(jù)庫QPS和TPS的方法和工具,包括直接通過命令行、PerformanceSchema、mysqladmin、Prometheus、自動(dòng)化腳本等,同時(shí),還提供了優(yōu)化建議,如索引優(yōu)化、SQL調(diào)優(yōu)、事務(wù)控制和配置調(diào)優(yōu)
以下是針對(duì) MySQL 數(shù)據(jù)庫 QPS(Queries Per Second)和 TPS(Transactions Per Second)數(shù)據(jù) 的詳細(xì)查詢方法和工具推薦,包含具體命令和示例:
一、直接通過 MySQL 命令行查詢
1. 查詢 QPS
-- 獲取當(dāng)前總查詢次數(shù)(所有類型) SHOW STATUS LIKE 'Queries'; -- 計(jì)算過去 N 秒的 QPS(例如 N=5) SELECT (NOW() - INTERVAL 5 SECOND) AS 時(shí)間差, (SHOW STATUS LIKE 'Queries') - prev_queries AS 當(dāng)前查詢總數(shù), ROUND((當(dāng)前查詢總數(shù) / 時(shí)間差.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
-- 獲取當(dāng)前事務(wù)提交次數(shù) SHOW STATUS LIKE 'Com_commit'; -- 計(jì)算過去 N 秒的 TPS(例如 N=5) SELECT (NOW() - INTERVAL 5 SECOND) AS 時(shí)間差, (SHOW STATUS LIKE 'Com_commit') - prev_commits AS 當(dāng)前提交總數(shù), ROUND((當(dāng)前提交總數(shù) / 時(shí)間差.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(按語句類型統(tǒng)計(jì))
SELECT event_name AS 查詢類型, COUNT_STAR AS 總執(zhí)行次數(shù), 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(按事務(wù)提交統(tǒng)計(jì))
SELECT event_name AS 事務(wù)類型, COUNT_STAR AS 提交次數(shù), AVG_TIMER_WAIT AS 平均延遲(微秒) FROM performance_schema.events_statements_summary_by_digest WHERE event_name = 'COMMIT';
三、使用 mysqladmin 工具
1. 查看實(shí)時(shí)狀態(tài)
# 查看所有關(guān)鍵狀態(tài)變量(包含 QPS 和 TPS) mysqladmin -u root -p status # 僅查看 QPS、TPS 和連接數(shù) mysqladmin -u root -p extended-status | grep -E 'Queries|Com_commit|Threads_connected'
四、使用 Prometheus + mysql_exporter
1. 部署 mysql_exporter
# 下載并運(yùn)行 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:所有查詢速率(每秒執(zhí)行次數(shù)) rate(mysql_statements_total{statement_type=~"SELECT|INSERT|UPDATE|DELETE"}[5m]) # TPS:事務(wù)提交速率(每秒提交次數(shù)) rate(mysql_statements_total{statement_type="COMMIT"}[5m])
3. 可視化儀表盤
- 在 Grafana 中添加 MySQL 監(jiān)控面板,展示實(shí)時(shí) QPS、TPS、慢查詢等指標(biāo)。
五、自動(dòng)化腳本(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
# 分析慢查詢?nèi)罩静⒔y(tǒng)計(jì) QPS/TPS pt-query-digest --slow-log=/var/log/mysql/slow.log --output=report
2. MySQL Workbench 的監(jiān)控面板
- 打開 Server Status 選項(xiàng)卡,直接查看 Queries per second 和 Transactions per second。
七、優(yōu)化建議
- 索引優(yōu)化:缺失索引會(huì)導(dǎo)致全表掃描,顯著降低 QPS。
- SQL 調(diào)優(yōu):避免復(fù)雜子查詢,使用
EXPLAIN
分析執(zhí)行計(jì)劃。 - 事務(wù)控制:減少長事務(wù)占用鎖資源,適當(dāng)調(diào)整隔離級(jí)別。
- 配置調(diào)優(yōu):修改
innodb_buffer_pool_size
、query_cache_size
等參數(shù)。
總結(jié)
- 輕量級(jí)監(jiān)控:直接使用
SHOW STATUS
或mysqladmin
。 - 精細(xì)化分析:啟用
Performance Schema
或集成 Prometheus。 - 長期優(yōu)化:結(jié)合慢查詢?nèi)罩竞退饕治龉ぞ撸ㄈ?
EXPLAIN
)提升性能。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于useSSL=false和true的區(qū)別及說明
這篇文章主要介紹了關(guān)于useSSL=false和true的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08MySQL數(shù)據(jù)庫高級(jí)查詢和多表查詢
這篇文章主要介紹了MySQL數(shù)據(jù)庫高級(jí)查詢和多表查詢,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08簡單講解MySQL的數(shù)據(jù)庫復(fù)制方法
這篇文章主要介紹了簡單講解MySQL的數(shù)據(jù)庫復(fù)制方法,利用到了常見的mysqldump工具,需要的朋友可以參考下2015-11-11Mysql語法、特殊符號(hào)及正則表達(dá)式的使用詳解
這篇文章主要介紹了Mysql語法、特殊符號(hào)及正則表達(dá)式的使用詳解,文中包括mysql常用顯示命令,索引使用規(guī)則等知識(shí)點(diǎn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11MySQL處理重復(fù)數(shù)據(jù)插入的處理方案
在數(shù)據(jù)庫操作中,處理重復(fù)數(shù)據(jù)插入是一個(gè)常見的需求,特別是在批量插入數(shù)據(jù)時(shí),可能會(huì)遇到主鍵沖突或唯一鍵沖突(Duplicate entry)的情況,本文將以一個(gè)實(shí)際的Python MySQL數(shù)據(jù)庫操作為例,分析如何優(yōu)化異常處理邏輯,需要的朋友可以參考下2025-04-04