您当前的位置: 首页 > 网站编程 > PHP教程 > 解决Mysql "Too many connections"问题

解决Mysql "Too many connections"问题

作者:xiaoxiao 来源:未知 发布时间: 2014-07-30 09:38 点击:
之前在博客介绍过一篇mysql锁机制相关文章,MYISAM只支持表锁;INNODB可以支持表锁和行锁。 最近公司平台频繁出现Too many connections,真的让我受了很多伤啊,原因就是表锁引起SQL堵塞,影响效率,造成连接数达到max_connections而崩溃。说说我的解决流程。 (1)检

解决Mysql "Too many connections"问题

  之前在博客介绍过一篇mysql锁机制相关文章,MYISAM只支持表锁;INNODB可以支持表锁和行锁。

  最近公司平台频繁出现"Too many connections",真的让我受了很多伤啊,原因就是表锁引起SQL堵塞,影响效率,造成连接数达到max_connections而崩溃。说说我的解决流程。

  (1)检查mysql配置的两个参数max_connections最大连接数和 wait_timeout连接空闲等待时长,如果是默认值,请自行修改:

  set global max_connections=3000;

  set global wait_timeout=10;

  (2)检查mysql慢查询日志

  1)发现一条 sql如下结构: select count(*) from table where ..., 我的业务表示INNODB,查阅资料发现,select count(*) from table,MyISAM只要简单的读出保存好的行数,而InnoDb会扫描所有的行数;但当该sql包含where时,两者都会对全表扫描,当然where后是索引会快的多。如果表的数据确实很大,比如我,就做了cache处理

  2)慢查询中出现了table level lock,但是表的Innodb引擎。怎么回事?InnoDB 是行级锁,原则上,更新操作只会锁住需要修改的行。如果读和写是相同的行,会阻塞;如果是不同的行,可以并发操作。不过InnoDB的行锁是通过索引实现的,如果检索条件没有索引,则会使用表锁。
分享到: