Mysql锁查看
查看InnoDB的锁情况
SHOW ENGINE INNODB STATUS;
命令会返回一个包含详细InnoDB引擎状态的报告,其中包含当前锁的详细信息。在输出的 LATEST DETECTED DEADLOCK 部分找到死锁信息,并在 TRANSACTIONS 部分找到当前的锁等待信息。
查看 MyISAM 锁情况
-- 方法一: 查看表锁
SHOW OPEN TABLES WHERE In_use > 0;
-- 方法二: 无论是InnoDB还是MyISAM,可以使用 SHOW PROCESSLIST 查看当前线程状态,包括锁等待信息:
SHOW PROCESSLIST;
-- 方法三: MySQL的 performance_schema 提供了详细的锁和等待信息
SELECT * FROM performance_schema.data_locks;
MyISAM
MyISAM 存储引擎在写入数据时使用的是整表锁,而不是行级锁。具体来说,MyISAM 在以下情况下会进行锁定操作:
1.读操作:对于读取数据的查询,MyISAM 采用共享锁,也就是说多个读取操作可以同时进行,但如果有写入操作正在进行,读取操作需要等待写入完成。
2.写操作:对于插入、更新或删除操作,MyISAM 会对整个表加独占锁,此时其他的读和写操作都需要等待写操作完成。
MyISAM 的锁机制特点:
•写锁阻塞读:当 MyISAM 进行写操作时,所有的读操作都会被阻塞,直到写操作完成。
•读锁不阻塞读:多个读操作可以并发执行,但只要有写操作,所有的读都会被阻塞。
•写锁阻塞写:当有一个写操作在进行时,其他的写操作也会被阻塞,直到当前的写操作完成。
优缺点:
•优点:整表锁的实现相对简单,性能在大量读操作下表现不错。
•缺点:写操作会阻塞其他所有的操作,导致并发写性能较差,不适合高并发写入的场景。
相比之下,InnoDB 存储引擎使用的是行级锁,它支持更高的并发写操作,并且在大量写入操作的场景中表现更好。如果你的应用需要频繁的写入,建议考虑将表从 MyISAM 转换为 InnoDB,以获得更好的并发性能。
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~


浙公网安备 33010602011771号