Mysql连接太多解决方案

  
  


从太多的连接字面理解,mysql连接数过多。当连接数量过多,且来不及释放时便会出现此错误。

     

<强>查看mysql当前连接信息,特别要注意休睡眠状态的连接。

  
 <代码>显示完整processlist;  
  
  

命令状态:

  
      <李>睡眠
    线程正在等待客户端发送新的请求。   <李>   
        <李>查询
      线程正在执行查询或者正在将结果发送给客户端。   
      李   <李>锁定
    在MYSQL服务层,该线程正在等待表锁。在存储引擎级别实现的锁,如INNODB的行锁,并不会体现在线程状态中。对于MYISAM来说这是一个比较典型的状态。但在其他没有行锁的引擎中也经常会出现.ANALYZING和统计线程正在收集存储引擎的统计信息,并生成查询的执行计划。   <李>复制到TMP表(在磁盘上)
    线程正在执行查询,并且将其结果集都复制到一个临时文件中,这种状态一般要么是在做集团的操作,要么是文件排序操作,或者是联盟操作。如果这个状态后面还有磁盘上的标,那表示MYSQL正在将一个内存临时表放到磁盘上。   <李>排序结果
    线程正在对结果集进行排序。   <李>
    线发送数据程可能在多个状态之间传送数据,或者生成结果集,或者在向客户端返回数据。   
     

<强>查看mysql设置的最大连接数

  
 <代码>显示全局变量如max_connections的; 
  

<>强服务器响应的最大连接数

  
 <代码>显示全局变量就像“max_user_connections”;  
  

建议:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高。

  
  

max_user_connections/max_connections * 100%的在

=10%      

如果最大连接数量没问题,而休睡眠状态的连接过多,则应该从两方面注意:

  
      <李> 1. wait_timeout空闲等待超时时间李   <李> 2. interactive_timeout交互超时时间(通过mysql客户端连接数据库是交互式连接)   
  
  

需要主题:wait_timeout设置过大有弊端,其体现就是MySQL里大量的睡眠进程无法及时释放,拖累系统性能。如果设置过小,可能会遭遇到“MySQL已经消失”之类的问题。

     

要想从根本上解决睡过多的问题,需从以下面三点排查:

  
      <李> 1。程序连接mysql,不使用持久链接。即使用mysqli_connect而不是pconnect。   <李> 2。程序执行结束,主动显式调用mysqli_close来释放连接资源。   <李> 3。解决程序中的SQL慢查询语句。   
  

<强>最后快速解决过程

  
 <代码>设置全球max_connections=500;
  集全球wait_timeout=300;
  集全球interactive_timeout=600;  

Mysql连接太多解决方案