检查mysql配置的两个参数max_connections【最大连接数】和 wait_timeout【连接空闲等待时长】,如果是默认值,请自行修改:
set global max_connections=3000; set global wait_timeout=10;
检查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的行锁是通过索引实现的,如果检索条件没有索引,则会使用表锁。