MySQL查询卡死。没有死锁。

MySQL查询数据卡死了。不返回数据。show processlist发现其实已经执行完了。不明白之后为什么卡死了。

怎么确定是卡死了?换个工具查询能得到结果吗?如MySQL命令行。

  • 这篇博客: 大厂都在用的MySQL优化方案中的 show processlist 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 慢查询日志在查询结束后才记录,所以在应用反应执行效率出现问题的时候查询慢查询日志并不能定位问题。
    可使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态,是否锁表等,可以实时查看sql的执行情况,同时对一些锁表进行优化。

    mysql> show processlist;
    +----+-----------------+-----------+-----------------+---------+--------+------------------------+------------------+
    | Id | User            | Host      | db              | Command | Time   | State                  | Info             |
    +----+-----------------+-----------+-----------------+---------+--------+------------------------+------------------+
    |  5 | event_scheduler | localhost | NULL            | Daemon  | 242579 | Waiting on empty queue | NULL             |
    | 16 | root            | localhost | common_mistakes | Sleep   |    488 |                        | NULL             |
    | 17 | root            | localhost | common_mistakes | Query   |      0 | starting               | show processlist |
    +----+-----------------+-----------+-----------------+---------+--------+------------------------+------------------+
    3 rows in set (0.00 sec)
    

1.首先执行:
show full processlist; //列出当前的操作process,一般会看到很多waiting的process,说明已经有卡住的proces了,我们要杀死这些process!!
2.再执行:
kill processid; //processid表示process的id,比如kill 20661,就会将id为20661的process杀死
3.使用 kill 将所有的 id 杀死。然后重启MySQL,一般就会解决了。
参考:https://blog.csdn.net/Allenzyg/article/details/109678036?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168179972616800211538166%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168179972616800211538166&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-109678036-null-null.blog_rank_default&utm_term=%E5%8D%A1%E6%AD%BB&spm=1018.2226.3001.4450