mysql的线程处于System lock状态下

The thread has called mysql_lock_tables() and the thread state has not been updated since. This is a very general state that can occur for many reasons.

For example, the thread is going to request or is waiting for an internal or external system lock for the table. This can occur when InnoDB waits for a 

table-level lock during execution of LOCK TABLES. If this state is being caused by requests for external locks and you are not using multiple mysqld servers 
that are accessing the same MyISAM tables, you can disable external system locks with the --skip-external-locking option. However, external locking is
disabled by default, so it is likely that this option will have no effect. For SHOW PROFILE, this state means the thread is requesting the lock (not waiting
for it).

System lock

这个线程是被mysql_lock_tables()调用的。这种状态可能是很多种原因造成的。

例如,一个线程想请求或者正在等一个表的内部或者外部的system lock;

也可能是InnoDB在执行lock tables的时候,等表级锁;

也可能是请求内部锁,比如访问相同MyISM表没有用多个mysqld服务;

遇到这种情况,可以用--skip-external-locking选项,禁用内部的system locks。然而,内部锁如果默认禁用的话,那个选项就会没用了。

如果是在show profile的时候遇到这种状态,就说明这个线程正在请求锁(不是等)。

来源:https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html

上一篇:mysql truncate 引起的 system lock,导致其他进程等待


下一篇:Mysql slave 延迟故障一列(无主键)