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
SQL2000数据库备份压缩技巧:优化空... 怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...

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

3
SQL字符串处理技巧:单引号使用与转义标... SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...

4
Windows环境下Redis安装指南与... redis安装windowsredis基本简介与安装安装Redis首先需要获取安...

5
深度解析:Redis性能优势与局限性,助... redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...

6
深入解析:MySQL数据库的特性与应用 mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...

7
Linux Redis后台启动教程:配置... linux怎么启动redis1、首先,为了管理方便,将Redis文件中的conf...

8
MySQL浮点数与Decimal类型详解... MySQL中的float和decimal类型有什么区别小数类型可以准确地表示非常...

9
C语言实现输入10个整数并找出最大最小值... C语言从键盘输入任意的10个整数,从中找出最大值和最小值并输出代码:#inclu...

10
揭秘MySQL:为何将可重复读设为默认事... mysql默认的事务隔离级别是READUNCOMMITTED(未提交读)、REA...