mysql 性能
SHOW GLOBAL STATUS
WHERE Variable_name IN (
'Threads_connected',
'Threads_running',
'Max_used_connections',
'Connections',
'Slow_queries',
'Aborted_connects'
);
SHOW VARIABLES LIKE 'max_connections';
SHOW FULL PROCESSLIST;
主要看:
Threads_connected:当前已建立的连接数,包括空闲连接。Threads_running:当前正在执行、非休眠的连接数。若持续偏高,要进一步看 SQL、锁和 CPU;瞬时高值不一定代表问题。Max_used_connections:MySQL 启动以来连接数峰值。接近max_connections才说明数据库连接上限可能成为问题。Slow_queries:慢查询计数。应结合慢查询日志和具体 SQL 分析。SHOW FULL PROCESSLIST:看连接是在执行什么,还是大量处于Sleep。大量Sleep不等于数据库正在高负载,但会占连接。
还可以找累计耗时最高的 SQL(适用于常见 MySQL 5.7/8.0 环境):
SELECT
DIGEST_TEXT,
COUNT_STAR,
ROUND(SUM_TIMER_WAIT / 1e12, 2) AS total_seconds,
ROUND(AVG_TIMER_WAIT / 1e9, 2) AS avg_ms,
SUM_ROWS_EXAMINED,
SUM_ROWS_SENT
FROM performance_schema.events_statements_summary_by_digest
WHERE DIGEST_TEXT IS NOT NULL
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;
SUM_ROWS_EXAMINED 很高、平均耗时高,或扫描行数远大于返回行数的 SQL,通常值得用 EXPLAIN 检查索引和执行计划。若要启用慢查询日志,先确认日志保留、磁盘空间和 long_query_time 设置,避免日志量过大。
应用服务器也要一起看:CPU 是否长期打满、内存和磁盘 I/O 是否紧张;同时记录接口 P95/P99 耗时、连接获取等待时间,以及连接池状态 created / inuse / max。例如 inuse 长期等于 max,更像池容量或连接归还问题;池没满但 SQL 耗时高,则应优先查查询和数据库负载。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/u013416034/article/details/166590290



