MySQL锁表状态检测与优化指南
查询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已处理所有挂起的插入操作,正在等待新的请求。