MySQL锁表状态检测与优化指南

创始人
2024-12-17 09:44:54
0 次浏览
0 评论

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

可以直接在mysql命令行执行:showengineinnodbstatus\G;

查看导致死锁的sql语句,分析索引情况,然后优化sql再showprocesslist;

显示状态,如“%lock%”

0;该语句记录了当前的锁表状态

另外,还可以打开慢查询日志Linux下,需要打开[mysqinmy.cnfld],在其中添加以下内容:

Slow_query_log=TRUE(某些版本的mysql已开启)

slow_query_log_file=/usr/local/mysql/slow_query_log.txt

long_query_time=3

扩展信息:

MySQL锁状态检查命令

表检查:检查数据表(这是自动的)。

Closingtables:表中修改的数据正在刷新到磁盘,已使用的表正在关闭。
这是一个快速操作,但如果没有发生这种情况,您应该验证磁盘空间是否已满或磁盘负载过重。

ConnectOut:复制从服务器正在连接主服务器。

Copyingtotmptableondisk:由于临时结果集大于tmp_table_size,临时表将从内存存储转换为磁盘存储以节省内存。

Creatingtmptable:正在创建一个临时表来存储一些查询结果。

deletingfrommaintable:服务器正在执行多表删除的第一部分,刚刚删除了第一个表。

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

1检查表是否被锁定:

(1)直接在mysql命令行运行:showengineinnodbstatus\G。

(2)检查导致死锁的SQL语句,分析索引情况,然后优化SQL。

(3)然后显示进程列表来检查导致锁定时间较长的SQL语句。

(4)showstatuslike‘%lock%.

2检查表锁状态和锁终止步骤:

0。

(2)查询进程:showprocesslist查询阻塞进程;

(3)分析阻塞表的SQL:分析对应的SQL,为表添加索引,为公共字段添加索引,为与表相关的字段添加索引。

(4)检查锁定的内容:SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCKS。

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

扩展信息

查看MySQL锁状态的命令:

Checktable:检查数据表(这是自动的)。

关闭表:正在将表中修改的数据分配到磁盘,并关闭已使用的表。
这是一个快速操作,但如果不是,您应该验证磁盘空间是否已满或磁盘负载过重。

ConnectOut:从复制服务器正在连接主服务器。

Copyingtotmptableondisk:由于临时结果集大于tmp_table_size,临时表正在从内存存储转换为磁盘存储以节省内存。

Creatingtmptable:创建一个临时表来存储一些查询结果。

Deletingfrommaintable:服务器正在执行多表删除的第一部分,刚刚删除了第一个表。

从引用中删除:服务器正在执行多表删除的第二部分,从其他表中删除数据。

Flushingtables:执行FLUSHTABLES,等待其他线程刷新数据表。

Killed:如果向线程发送终止请求,该线程将检查终止标志并丢弃下一个终止​​请求。
MySQL会在每个主循环中检查kill标志,但在某些情况下线程可能会在短时间内死亡。
如果该线程被另一个线程锁定,则当锁被释放时,kill请求将立即生效。

锁定:被其他问题锁定。

发送数据:正在处理SELECT查询记录并将结果发送到客户端。

Sortingforgroup:GROUPBY排序。

Sortingfororder:按ORDERBY排序。

开表:如果不受其他因素干扰,这个过程应该很快。
例如,在执行ALTERTABLE或LOCKTABLE语句之前,数据表不能被其他线程打开。
试图打开一张桌子。

重复数据删除:正在执行SELECTDISTINCT查询,但MySQL无法优化前一阶段的那些重复记录。
因此,MySQL在将结果发送给客户端之前必须再次删除重复数据。

可释放:在表上获取了锁,但在表结构被修改之前无法获取锁。
锁已释放,数据表已关闭,正在尝试重新打开数据表。

按顺序修复:修复指令是顺序创建索引。

Repairwithkeycache:修复指令正在使用索引缓存逐一创建新索引。
它会比Repairbysort慢。

Searchingrowsforupdate:搜索符合更新条件的记录。
必须完成后UPDATE才能修改相应的数据。

睡眠:等待客户端发送新的请求。

系统锁:等待接收外部系统锁。
如果当前没有运行多个mysqld服务器同时查询同一个表,则可以通过添加--skip-external-locking参数来禁用外部系统锁。

升级死锁:INSERTDELAYED正在尝试获取锁定表以插入新记录。

更新:搜索匹配的记录并编辑它们。

锁定用户:等待GET_LOCK()。

Waitingfortables:通知Start数据表的结构已被修改,必须重新打开数据表才能获取新的结构。
然后,要重新打开数据表,必须等到所有其他线程都关闭该表。

挂起的手动插入:INSERTDELAYED已处理所有挂起的插入操作,正在等待新的请求。

热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...