本人遇到的问题再现:本人给一张有几百万条数据的表添加索引,进度非常慢,导致其它查询无法进行!!!
处理方式:
使用Navicat的命令行模式,执行以下命令:show processlist;查询出结果会看到有哪些线程正在执行,也可以查看锁表的线程。你会发现SELECT * FROM `***`那个线程状态(State)是Waiting for table metadata lock,后面有个这个表的所有操作都是这个状态,很明显是这条加索引的语句把表给锁了。
查看线程ID,执行:
kill 线程Id
KILL命令用于终止正在运行的数据库连接。这个命令可以用来终止与MySQL服务器上的特定连接相关的线程。
补充内容:
在MySQL中,KILL命令用于终止正在运行的数据库连接。这个命令可以用来终止与MySQL服务器上的特定连接相关的线程。
当您执行KILL command时,您需要指定要终止的线程ID。您可以使用KILL QUERY thread_id来终止特定连接当前正在执行的语句,而不会断开连接。如果连接上有多个查询,这些查询不会受到影响。
另外,如果您拥有PROCESS权限,则可以查看所有线程。如果您拥有SUPER权限,则可以终止所有线程和语句。否则,您只能查看和终止您自己的线程和语句。
请注意,当您使用KILL命令终止一个连接时,这个连接上的所有未提交的事务都将被回滚,而已经提交的事务将不受影响。
此外,还可以使用mysqladmin processlist和mysqladmin kill命令来检查和终止线程。