本文主要是介绍为什么我只查一行的语句,也执行这么慢?读后总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
sql执行慢的常见原因:mysql压力大,CPU占用率高,IO利用率高。这不属于今天讨论的范围。
造表与造数据的语句
mysql> CREATE TABLE t
(
id
int(11) NOT NULL,
c
int(11) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB;
delimiter ;;
create procedure idata()
begin
declare i int;
set i=1;
while(i<=100000) do
insert into t values(i,i);
set i=i+1;
end while;
end;;
delimiter ;
call idata();
- 查询长时间不返回
select * from t where id = 1;
遇到长时间不返回,大概率是表被锁住了。
分析手段:通过show processlist命令查看语句状态
1.1等待MDL锁
查看show processlist 的state字段显示waiting for table metadata lock 等待MDL锁。
这表示现在有另一个线程正在表t上持有MDL写锁(一般就是DDL操作),把select操作堵住了。
这类问题的处理方式谁持有MDL写锁,然后把它kill掉。但是在show processlist命令输出中很难找到。我们可以在performance_schema和sys系统库查找,不过需要设置performance_schema=
这篇关于为什么我只查一行的语句,也执行这么慢?读后总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!