出现的错误:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

解决办法:

查看sleep的进程

mysql> show full processlist;
+-------+----------+-------------------+----------+---------+-------+----------+-----------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+----------+-------------------+----------+---------+-------+----------+-----------------------------------------------------------------------------+
| 32579 | official | 127.0.0.1:42690 | official | Sleep | 20926 | | NULL |
| 32715 | erp | 127.0.0.1:2078 | NULL | Sleep | 4570 | | NULL |
| 32716 | erp | 127.0.0.1:2079 | erp | Sleep | 3590 | | NULL |
| 32717 | erp | 127.0.0.1:2080 | erp | Sleep | 3577 | | NULL |
| 32732 | erp | 127.0.0.1:2081 | erp | Sleep | 3590 | | NULL |
| 32733 | erp | 127.0.0.1:2082 | NULL | Sleep | 1412 | | NULL |
| 32734 | erp | 127.0.0.1:2083 | erp | Sleep | 1160 | | NULL |
| 32735 | erp | 127.0.0.1:2084 | erp | Sleep | 985 | | NULL |
| 32736 | erp | 127.0.0.1:2085 | erp | Sleep | 1160 | | NULL |
| 32739 | erp | 127.0.0.1:2088 | erp | Sleep | 695 | | NULL |
| 32740 | erp | 127.0.0.1:2089 | erp | Sleep | 768 | | NULL |
| 32741 | erp | 127.0.0.1:2090 | erp | Sleep | 688 | | NULL |
| 32742 | erp | 127.0.0.1:2091 | erp | Sleep | 686 | | NULL |
| 32743 | erp | 127.0.0.1:2092 | erp | Sleep | 687 | | NULL |
| 32745 | erp | 127.0.0.1:2093 | erp | Sleep | 686 | | NULL |
| 32746 | erp | 127.0.0.1:2094 | erp | Sleep | 686 | | NULL |
| 32763 | root | localhost | erp | Query | 0 | starting | show full processlist |
| 32765 | erp | 127.0.0.1:58216 | erp | Sleep | 18 | | NULL |
| 32766 | erp | 127.0.0.1:58218 | erp | Sleep | 41 | | NULL |
| 32767 | erp | 127.0.0.1:58220 | erp | Sleep | 41 | | NULL |
| 32768 | erp | 127.0.0.1:58222 | erp | Sleep | 41 | | NULL |
| 32769 | erp | 127.0.0.1:58224 | erp | Sleep | 2 | | NULL |
| 32770 | erp | 127.0.0.1:2106 | NULL | Sleep | 153 | | NULL |
| 32771 | erp | 127.0.0.1:2107 | erp | Sleep | 148 | | NULL |
| 32772 | erp | 127.0.0.1:2108 | erp | Query | 18 | updating | UPDATE `erp_user` SET `pwd`='OyUHgt21gTP2/5uFgbKZtq==' WHERE (`id`='10113') |
+-------+----------+-------------------+----------+---------+-------+----------+-----------------------------------------------------------------------------+

没有看到正在执行的慢SQL记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit 或者 rollback而是卡住了,我们需要手动kill掉。

mysql> SELECT * FROM information_schema.INNODB_TRX\G;
*************************** 1. row ***************************
trx_id: 20342
trx_state: RUNNING
trx_started: 2018-01-29 16:48:13
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 4
trx_mysql_thread_id: 32735
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 1
trx_lock_structs: 2
trx_lock_memory_bytes: 1136
trx_rows_locked: 1
trx_rows_modified: 2
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 10000
trx_is_read_only: 0
trx_autocommit_non_locking: 0
1 row in set (0.00 sec) ERROR:
No query specified

看到有这条 32735 的sql,kill掉,执行kill 32735;

kill 32735;

然后再去查询INNODB_TRX表,就没有阻塞的事务sleep线程存在了,如下所示:

mysql> SELECT * FROM information_schema.INNODB_TRX\G;

Empty set (0.00 sec)

现在可以正常执行 sql 语句了

mysql 5.7 线程阻塞处理的更多相关文章

  1. MySQL MySql连接数与线程池

    MySql连接数与线程池 by:授客 QQ:1033553122 连接数 1.  查看允许的最大并发连接数 SHOW VARIABLES LIKE 'max_connections'; 2.  修改最 ...

  2. java线程阻塞问题排查方法

    我开发的worker,每隔几个月线上都会阻塞一次,一直都没查出问题.今天终于了了这个心结.把解决过程总结下和大家分享. 首先用jstack命令打出这个进程的全部线程堆栈.拿到线程dump文件之后,搜索 ...

  3. 【Javascript】解决Ajax轮询造成的线程阻塞问题(过渡方案)

    一.背景 开发Web平台时,经常会需要定时向服务器轮询获取数据状态,并且通常不仅只开一个轮询,而是根据业务需要会产生数个轮询.这种情况下,性能低下的Ajax长轮询已经不能满足需求,频繁的访问还会造成线 ...

  4. java并发编程(四)守护进程 线程阻塞的四种情况

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17099981 守护线程   Java中有两类线程:User Thread(用户线程).Da ...

  5. jQuery同步Ajax带来的UI线程阻塞问题及解决办法

    俗话说不作死就不会死,今天作死了一回,写了一个比较二逼的函数,遇到了同步Ajax引起的UI线程阻塞问题,在此记录一下. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则 ...

  6. CountDownLatch线程阻塞用法实例

    在编写多线程的工作中,有个常见的问题:主线程(main) 启动好几个子线程(task)来完成并发任务,主线程要等待所有的子线程完成之后才继续执行main的其它任务. 默认主线程退出时其它子线程不会停, ...

  7. 【性能诊断】七、并发场景的性能分析(windbg案例,线程阻塞)

    简单整理一个测试Demo,抓取dump并验证,步骤如下: Symbol File Path:SRV*C:\Symbols*http://msdl.microsoft.com/download/symb ...

  8. Android Studio学习随笔-UI线程阻塞以及优化

    我们在使用手机的时候,经常会遇到一个问题:先是卡死,然后跳出该程序无响应,是否关闭的提示(当然有可能是我们手机性能太差=.=)这是因为线程的阻塞引起的,在这里我讲述一下UI线程,一般处理程序会在UI线 ...

  9. JAVA并发实现四(守护线程和线程阻塞)

    守护线程     Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台 ...

随机推荐

  1. http响应头里没有或者有content-length的几种可能性

    对于http的请求返回结果要进行内容的长度校验主要有两种方式,二者互斥使用 1.客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer ...

  2. 在Git中设置自己的姓名

    在Git中,自己的姓名与每一个commit提交绑定在一起.如果你在使用Azure DevOps Server中的Git Repo时,一定要注意commit中的提交者与服务器上的推送者,是两个概念. 在 ...

  3. CentOS防火墙配置

    1.查询防火墙状态 service iptables status 2.开启防火墙 service iptables start 3.关闭防火墙 service iptables stop 4.重启防 ...

  4. Apple Watch笔记-应用内导航模式

    最近苹果婊上市,水果也发布了Xcode 6.2正式版,WatchKit也可以正常使用了.水果很及时地提供了Apple Watch的开发文档,我也及时地尝试着边学习边开发Watch App. 今天主要想 ...

  5. Liferay7 BPM门户开发之12:acitiviti和liferay用户权限体系集成

    写到第12章才出现Liferay的内容,希望可以厚积薄发. 我们的目标是不使用不维护Activiti的用户组织架构,只维护Liferay的体系,这样的好处是非常明显的,即不用做组织架构的同步工作. 原 ...

  6. Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)

    开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...

  7. Go语言标准库之JSON编解码

    Go语言标准库之JSON编解码 基本的类型 Go语言中的数据类型和JSON的数据类型的关系 bool -> JSON boolean float64 -> JSON numbers str ...

  8. ELKstack简介及环境部署

    ELK工作流程图 环境准备 安装Logstash依赖包JDK Logstash的运行依赖于Java运行环境, Logstash 1.5以上不低于java 7推荐使用最新版本的Java.由于只是运行Ja ...

  9. 记一次sentry部署过程

    本文记录下部署sentry和其中遇到的问题 Sentry 是一款基于 Django实现的错误日志收集和聚合的平台,它是 Python 实现的,但是其日志监控功能却不局限于python,对诸如 Node ...

  10. Flask源码复习之路由

    构建路由规则 一个 web 应用不同的路径会有不同的处理函数,路由就是根据请求的 URL 找到对应处理函数的过程. 在执行查找之前,需要有一个规则列表,它存储了 url 和处理函数的对应关系.最容易想 ...