首页 / MYSQL / mysql锁表处理方法
mysql锁表处理方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql锁表处理方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2578字,纯文字阅读大概需要4分钟。
内容图文
![mysql锁表处理方法](/upload/InfoBanner/zyjiaocheng/876/8c0f5d92ffe74376ab1671c78e26fd14.jpg)
1.Mysql锁概述
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁;BDB存储引擎采用的是页面锁,但也支持表级锁;InnoDB存储引擎既支持行级锁,也支持表级锁,但默认情况下是采用行级锁。
2.锁表及解锁
客户端连接Mysql时会产生一个connection,当多个连接(数据库连接)同时对一个表的数据进行更新操作,那么速度将会越来越慢,执行一段时间后将出现数据表被锁的现象,从而影响到其它的查询及更新。尤其当我们使用循环的时候更加容易出现锁表这种情况,导致其它连接无法读写此表。一旦遇到无法对某张表进行读写操作时,而其它表可以正常读写,就要检查是不是该表被锁了,如果被锁住就要解锁,解锁方式有以下两种。
show processlist
该命令是显示用户正在运行的线程,默认只显示前100条数据,如果要显示全部线程,执行show full processlist。需要注意的是只有root用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。show processlist 显示的信息都是来自MySQL系统库information_schema中processlist表,执行select * from information_schema.processlist语句也能显示相同的数据。显示结果如图:
参数解释如下:
Id:就是这个线程的唯一标识,当我们发现这个线程有问题的时候,可以通过kill命令将这个线程杀掉。
User: 就是指启动这个线程的用户。
Host: 记录了发送请求的客户端的 IP 和 端口号。通过这些信息在排查问题的时候,我们可以定位到是哪个客户端的哪个进程发送的请求。
DB: 当前执行的命令是在哪一个数据库上。如果没有指定数据库,则该值为NULL。
Command: 是指此刻该线程正在执行的命令。
Time: 表示该线程处于当前状态的时间。
State: 线程的状态。
Info: 线程执行的语句。
需要关注的是state列的值,不同值如下:
Checking table:正在检查数据表。
Closing tables:正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。
Connect Out:从服务器正在连接主服务器。
Copying to tmp table on disk:由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。
deleting from main table:服务器正在执行多表删除中的第一部分,刚删除第一个表。
deleting from reference tables:服务器正在执行多表删除中的第二部分,正在删除其他表的记录。
Locked:被其他查询锁住了。
Sending data:正在处理SELECT查询的记录,同时正在把结果发送给客户端。
Sleeping:正在等待客户端发送新请求。
如果发现state值为Locked,找到Id值,Kill掉就行。select * from information_schema.innodb_trx
需要看trx_rows_locked和trx_mysql_thred_id,如果trx_rows_locked里的值不为0,说明有阻塞数据,执行Kill trx_mysql_thred_id。
内容总结
以上是互联网集市为您收集整理的mysql锁表处理方法全部内容,希望文章能够帮你解决mysql锁表处理方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。