mysql 锁

1:查看数据库当前的进程,这个命令可以列出当前库所有的线程

mysql> show processlist;

2:查看当前的事物情况

2-1:查询当前数据库运行的所有事物
mysql> SELECT * FROM information_schema.INNODB_TRX;
2-2:查询当前数据库出现的锁
mysql> SELECT * FROM information_schema.INNODB_LOCKs;
2-3:查询锁等待的对应关系
mysql> SELECT * FROM information_schema.INNODB_LOCK_waits;

3:连表查询出所有需要杀掉的进程

mysql> select concat('KILL ',id,';') from information_schema.processlist p inner
join information_schema.INNODB_TRX x on p.id=x.trx_mysql_thread_id where db='test';

注:kill掉对应的进程之后,再次查询事物表。为空就可以正常执行了。


表锁

LOCK TABLES a WRITE;
INSERT INTO a_copy SELECT * FROM a WHERE create_time < DATE_SUB(NOW(), INTERVAL 3 MONTH);
UNLOCK TABLES;

行锁

BEGIN;
SELECT * FROM a WHERE create_time < DATE_SUB(NOW(), INTERVAL 3 MONTH) FOR UPDATE;
INSERT INTO a_copy SELECT * FROM a WHERE create_time < DATE_SUB(NOW(), INTERVAL 3 MONTH);
COMMIT;

查看当前正在被锁定的行:

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
# 8版本mysql
SELECT * FROM performance_schema.data_locks;
# 这条语句将会显示当前正在被锁定的行的相关信息,包括锁定的会话ID、锁定的表名、锁定的行号等。

查看当前等待锁定的行:

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
# 8版本mysql
SELECT * FROM performance_schema.data_lock_waits;
# 这条语句将会显示当前正在等待锁定的行的相关信息,包括等待的会话ID、等待的表名、等待的行号等。

查看表状态

SHOW OPEN TABLES;
如果某个表正在被锁定,则其状态为Locked。

查看表锁等待

SHOW FULL PROCESSLIST;
如果某个进程正在等待某个表的锁,则其状态为Waiting for table level lock。
posted @   Ysctest  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示