查询正在执行的SQL的数据库名和表名
创建限制0.5个CPU和0.5G内存的MySQL容器
docker run -itd --name mysql --cpu-quota=50000 --memory 512M --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
创建person表
DROP TABLE IF EXISTS person; CREATE TABLE person ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name varchar(10) ) ENGINE = InnoDB CHARSET = utf8mb4;
插入10w条记录
DROP PROCEDURE IF EXISTS init_person_data; DELIMITER $ CREATE PROCEDURE init_person_data() BEGIN DECLARE i INT DEFAULT 1; WHILE i <=100000 DO INSERT INTO person(name) VALUES(CONCAT(CAST(i AS char), 'abc')); SET i = i+1; END WHILE; END $ DELIMITER ; CALL init_person_data();
跑超慢SQL,耗时26分30秒左右
SELECT DISTINCT p1.name FROM person p1 LEFT JOIN person p2 ON p1.name = p2.name;
mysqld的CPU使用率接近50%
查看mysqld进程打开的业务数据库表文件
lsof -p 20241 | grep "/var/lib/mysql/" | grep -e "\.ibd" | grep -v "/var/lib/mysql/mysql"
test是数据库名字,person是表名字。
查看当前用户正在运行的线程(root可以看到所有)
show full processlist;
说明超慢SQL还没有执行结束。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!