mysql的线程处于System lock状态下

Posted 圆善的学习园地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的线程处于System lock状态下的主要内容,如果未能解决你的问题,请参考以下文章

python-锁机制

多线程模块

MySQL --- 锁的粒度和类型死锁

Java多线程学习篇Lock

spin_lock自旋锁

MySQL进阶垫脚石:线程长时间处于killed状态怎么破?