查询mysql哪些表正在被锁状态

2024-04-13 19:22:42 浏览

(1)直接在mysql命令行执行:show engine innodb statusG。

查询mysql哪些表正在被锁状态

(2)查看造成死锁的sql语句,分析索引情况,然后优化sql。

(3)然后show processlist,查看造成死锁占用时间长的sql语句。

(4)show status like ‘%lock%。 2.查看表被锁状态和结束死锁步骤:

(1)查看表被锁状态:show OPEN TABLES where In_use > 0; 这个语句记录当前锁表状态 。

(2)查询进程:show processlist查询表被锁进程;查询到相应进程killid。

(3)分析锁表的SQL:分析相应SQL,给表加索引,常用字段加索引,表关联字段加索引。

(4)查看正在锁的事物:SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS。

(5)查看等待锁的事物:SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS。

乐观锁:假设并发操作时不会发生冲突,只在提交事务时检查数据是否被其他事务修改过。常用于读多写少的场景。

悲观锁:假设并发操作时会发生冲突,因此在操作期间持有锁来避免冲突。常用于写多读少的场景。

全局锁:对整个数据库实例加锁,限制除了超级用户外的所有查询和修改操作。一般用于备份、恢复等操作。

表级锁:对整个表加锁,其他连接无法修改或读取该表的数据,但可以对其他表进行操作。

页级锁:对数据页(通常是连续的几个数据块)加锁,其他连接可以读取该表的数据,但是不能修改。

行级锁:对某一行加锁,阻止其他连接对该行的读取和修改操作。

共享锁:多个事务可以同时读取某一条记录,但是不能进行修改。

排他锁:也称为独占锁,只有一个事务能读取或修改数据记录。

第一步,创建数据库表writer和查看表结构,利用SQL语句:create table writer(wid int(10),wno int(10),wname varchar(20),wsex varchar(2),wage int(2)第二步,向数据库表writer插入五条数据,插入后查看表里数据第三步,利用锁定语句锁定数据库表writer,利用SQL语句:lock table writer read;让数据库表只读不能进行写第四步,为了验证锁定效果,可以查看数据库表数据,利用SQL语句:select * from writer;第五步,利用update语句对id=5进行更新,SQL语句为:update writer set wname = '胡思思' where id = 5;第六步,利用unlock进行解锁,SQL语句为:unlock tables;

-- 查看那些表锁到了show OPEN TABLES where In_use > 0;-- 查看进程号show processlist;--删除进程kill 1085850;

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。