数据库是大型架构基石,下面我详解MySQL性能优化命令@mikechen

慢查询是性能优化的入口,几乎所有优化都从这里开始。

SHOW VARIABLESLIKE'%slow_query%';
SHOW VARIABLESLIKE'long_query_time';

开启/设置慢查询日志(常用临时开启方式)

SETGLOBAL slow_query_log=1;
SETGLOBAL long_query_time=0.5;-- 单位秒,建议0.1~1秒
SETGLOBAL slow_query_log_file='/path/to/slow.log';
SETGLOBAL log_queries_not_using_indexes=1;-- 记录未走索引的查询

实时查看当前正在执行的查询(神器)

SHOW PROCESSLIST;
-- 或更详细(MySQL 5.7+ / 8.0+ 推荐)
SELECT*FROM performance_schema.threadsWHERE PROCESSLIST_COMMAND!='Sleep';

查看执行计划(优化 SQL 的第一步)

EXPLAINSELECT...;
EXPLAINANALYZESELECT...;-- MySQL 8.0.18+ 更准确(含实际执行时间)
EXPLAIN FORMAT=JSONSELECT...;-- 更详细的树状结构

InnoDB 引擎最重要的一条状态命令 sql→ 包含:锁等待、缓冲池命中率、redo log、undo log、事务、I/O、Purge 等几乎所有关键信息。

SHOWENGINEINNODBSTATUS\\G

查看全局状态值(判断命中率、压力点)

SHOWGLOBALSTATUSLIKE'Innodb_buffer_pool_%';
SHOWGLOBALSTATUSLIKE'%handler_read%';-- 看索引使用情况
SHOWGLOBALSTATUSLIKE'Created_tmp%';-- 临时表/磁盘临时表
SHOWGLOBALSTATUSLIKE'Sort%';-- 排序内存命中
SHOWGLOBALSTATUSLIKE'Qcache%';-- 查询缓存(8.0已移除)

查看当前连接数、最大连接数使用情况

SHOWGLOBALSTATUSLIKE'Threads_%';
SHOWGLOBAL VARIABLESLIKE'max_connections';

查看表索引情况 + 基数(判断索引是否有效)

SHOWINDEXFROM db.table;
ANALYZETABLE db.table;-- 更新索引统计信息(很重要!)

查看表大小、碎片情况(决定是否要 OPTIMIZE)

SELECT
    table_schema'数据库',
    table_name'表名',
ROUND(data_length/1024/1024,2)'数据大小 MB',
ROUND(index_length/1024/1024,2)'索引大小 MB',
ROUND((data_length+index_length)/1024/1024,2)'总大小 MB'
FROM information_schema.tables
WHERE table_schema='your_db'
ORDERBY data_lengthDESC;

碎片整理(MyISAM/InnoDB 都适用)

OPTIMIZETABLE db.table_name;

查看主从复制延迟(主从环境必备)从库执行:sql重点看:Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running

SHOW SLAVESTATUS\\G

查看当前使用的所有变量(排查配置问题)

SHOWGLOBAL VARIABLES;
-- 常用过滤
SHOWGLOBAL VARIABLESLIKE'%buffer%';
SHOWGLOBAL VARIABLESLIKE'%innodb%';

查看大事务、长事务(杀掉它们)

-- MySQL 8.0+
SELECT*FROM performance_schema.data_locks;
SELECT*FROM performance_schema.data_lock_waits;

-- 或经典方式
SELECT*FROM information_schema.INNODB_TRXORDERBY trx_started;

杀掉指定会话(卡死、锁表时救命)

KILL12345;-- 12345 是 processlist 中的 Id

性能模式快速诊断(MySQL 5.6+ 强烈推荐)

-- 常用语句
SELECT*FROM performance_schema.events_statements_summary_by_digest
ORDERBY SUM_TIMER_WAITDESCLIMIT20;

-- Top 10 最耗时 SQL
SELECT DIGEST_TEXT, COUNT_STAR, AVG_TIMER_WAIT/1e9'avg_ms'
FROM performance_schema.events_statements_summary_by_digest
ORDERBY SUM_TIMER_WAITDESCLIMIT10;
评论交流
    说说你的看法