mysql查看锁表方法详解
1、show OPEN TABLES where In_use > 0;
查看哪些表在使用中,In_use列表示有多少线程正在使用某张表,Name_locked表示表名是否被锁,这一般发生在Drop或Rename命令操作这张表时。所以这条命令不能帮助解答我们常见的问题:当前某张表是否有死锁,谁拥有表上的这个锁等。
2、show status like '%lock%', show status like 'Table%'查看服务器状态
可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺:
mysql> show status like 'Table%';
+----------------------------+----------+
| Variable_name | Value |
+----------------------------+----------+
| Table_locks_immediate | 105 |
| Table_locks_waited | 3 |
+----------------------------+----------+
2 rows in set (0.00 sec)
锁状态
mysql的锁有表锁和行锁,myisam最小锁为表锁,innodb最小锁为行锁,可以通过以下命令获取锁定次数、锁定造成其他线程等待次数,以及锁定等待时间信息。
mysql> show status like '%lock%';
+------------------------------------------+---------+
| Variable_name | Value |
+------------------------------------------+---------+
| Com_lock_tables | 0 |
| Com_unlock_tables | 0 |
| Innodb_row_lock_current_waits | 0 |
| Innodb_row_lock_time | 0 |
| Innodb_row_lock_time_avg | 0 |
| Innodb_row_lock_time_max | 0 |
| Innodb_row_lock_waits | 0 |
| Key_blocks_not_flushed | 0 |
| Key_blocks_unused | 13396 |
| Key_blocks_used | 19 |
| Performance_schema_locker_lost | 0 |
| Performance_schema_rwlock_classes_lost | 0 |
| Performance_schema_rwlock_instances_lost | 0 |
| Qcache_free_blocks | 0 |
| Qcache_total_blocks | 0 |
| Table_locks_immediate | 1570736 |
| Table_locks_waited | 7294 |
+------------------------------------------+---------+
如当Table_locks_waited与Table_locks_immediate的比值较大,则说明我们的表锁造成的阻塞比较严重,可能需要调整Query语句,或者更改存储引擎,亦或者需要调整业务逻辑。当然,具体改善方式必须根据实际场景来判断。而Innodb_row_lock_waits较大,则说明Innodb的行锁也比较严重,且影响了其他线程的正常处理。同样需要查找出原因并解决。造成Innodb行锁严重的原因可能是Query语句所利用的索引不够合理(Innodb行锁是基于索引来锁定的),造成间隙锁过大。也可能是系统本身处理能力有限,则需要从其他方面来考虑解决。
3、show processlist;
查看进程状态
mysql> show processlist;
查看进程状态,通过此命令可以查看哪些sql在等待锁
4、进入information_schema 数据库,查询表PROCESSLIST,查看各SQL执行状态
mysql> select * from PROCESSLIST where DB='database_name' limit 10;
+----------+---------+---------------------+------------------------------------------+---------+------+-
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |
+----------+---------+---------------------+------------------------------------------+---------+------+-
| 33076340 | db_user| 192.168.13.1:50355 | database_name | Sleep | 10 | | NULL |
| 33076170 | db_user| 192.168.13.1:44206 | database_name | Sleep | 97 | | NULL |
| 33075794 | db_user| 192.168.13.1:44156 | database_name | Sleep | 1063 | | NULL |
+----------+---------+---------------------+------------------------------------------+---------+------+-
此方式和上面第三种方式是一样的效果
相关推荐
MySQL锁详解,锁还是非常重要的,无论解决工作的死锁还是面试都会有
MySQL锁
资源名称:mysql锁详解资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
mysql_innoDB 事务与锁详解
mysql 事物与锁详解,详细描述事物产生的前因后果与解决方案. 锁的力度都有解释。,很好的学习资料
java,乐观锁,悲观锁详解释
本文全面讲解了MySQL中锁包括表锁,行锁,共享锁,排它锁,间隙锁的详细使用方法
│ 第十课MySQL锁机制和事务.pdf │ 第四课SQL基础语法.pdf │ ├─新版MySQL DBA综合实战班 第01天 │ 0_MySQL高级DBA公开课视频.avi │ 1_数据库通用知识介绍.avi │ 2_MySQL8常规安装.avi │ 3_MySQL8非常规安装...
│ day3_MySQL事务与锁详解-笔记.pdf │ day3_MySQL事务与锁详解-课件.pdf │ day3_MySQL事务与锁详解.mp4 │ day3_事务与锁演示SQL.sql │ day4_MySQL性能优化总结-笔记.pdf │ day4_MySQL性能优化总结-课件.pdf │...
Mysql 支持3中锁结构 表级锁,开销小,加锁快,不会出现死锁,锁定的粒度大,冲突概率高,并发度最低 行级锁,开销小,加锁慢,会出现死锁,锁定粒度小,冲突概率最低,并发度最高 页面锁,开销和加锁处于表锁和行锁之间,会...
MySQL锁机制 数据库加锁分析 下面讨论的都是基于MySQL的InnoDB。因为涉及到公司利益问题,所以下面很多代码和数据库信息,进行了缩减和修改,望见谅。业务场景是优惠券系统规则规定了一个优惠券活动最多可发行多少张...
MySQL_InnoDB之事务与锁详解.doc
详解Mysql事务隔离级别与锁机制.doc
MySQL死锁问题是很多程序员在项目开发中常遇到的问题,现就MySQL死锁及解决方法详解如下: 1、MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级...
1.事务 1.1 什么是事务? 事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。 1.2 哪些引擎支持事务 InnoDB支持事务 1.3 事务的四大特性 原子性(Atomicity):强调事务的不可分割,...
2、查询是否锁表 show OPEN TABLES where In_use > 0; 示例: 新建一个会话执行如下的显示锁示例 LOCK TABLES account_data.account READ; SELECT SLEEP(160); UNLOCK TABLES account_data.account; 另开启一个...
msql