1.查看运行线程:show processlist
show processlist;
这是很重要的一个命令,用于显示用户运行线程。可以根据id号kill线程。也可以查表,效果一样:
select * from information_schema.processlist;
列 | 含义 |
---|---|
Id | 线程的唯一标志,可以根据它 kill 线程 |
User | 启动这个线程的用户,普通用户只能看到自己的线程 |
Host | 哪个 IP 端口发起的连接 |
db | 操作的数据库 |
Command | 线程的命令 https://dev.mysql.com/doc/refman/5.7/en/thread-commands.html |
Time | 操作持续时间,单位秒 |
State | 线程状态,比如查询可能有 copyingtotmptable,Sortingresult,Sendingdata https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html |
Info | SQL 语句的前 100 个字符,如果要查看完整的 SQL 语句,用 SHOW FULL PROCESSLIST |
2.服务器运行状态:show status
SHOW STATUS 用于查看 MySQL 服务器运行状态(重启后会清空),有 session 和 global 两种作用域,格式:参数-值。可以用like带通配符过滤。
SHOW GLOBAL STATUS LIKE 'com_select';-- 查看 select 次数
3.存储引擎运行信息:show engine
show engine 用来显示存储引擎的当前运行信息,包括事务持有的表锁、行锁信息;事务的锁等待情况;线程信号量等待;文件IO请求;buffer pool统计信息。
例如:
show engine innodb status;
如果需要将监控信息输出到错误信息error log中(15秒钟一次),可以开启输出。
show variables like 'innodb_status_output%'; -- 开启输出:
SET GLOBAL innodb_status_output=ON;
SET GLOBALinnodb_status_output_locks=ON;
我们现在已经知道了这么多分析服务器状态、存储引擎状态、线程运行信息的命令,如果让你去写一个数据库监控系统,你会怎么做?其实很多开源的慢查询日志监控工具,他们的原理其实也都是读取的系统的变量和状态。