做网站开发用笔记本要什么配置,个体工商户备案网站备案,网站推广视频的服务方案,素材网站的素材可以商用吗文章目录 场景复现解决方案一、调整连接数二、优化程序 场景复现
已经上线正常运行的项目突然很多功能无法使用#xff0c;查看程序日志发现MySQL报错#xff0c;异常信息: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.Ge… 文章目录 场景复现解决方案一、调整连接数二、优化程序 场景复现
已经上线正常运行的项目突然很多功能无法使用查看程序日志发现MySQL报错异常信息: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 0, maxActive 200。根据报错信息来看是由于数据库连接数不足导致的当新的请求到来当前有效连接数超过maxActive连接数再获取连接时就新来的请求就会处于排队状态 当 排队时间超过maxWait就会抛出该异常。解决方案有两种一种是调大MySQL连接数另一种就是优化程序。 解决方案
一、调整连接数
MySQL常用连接参数介绍 可通过指令 SHOW VARIABLES LIKE %connect%; 和 SHOW VARIABLES LIKE %timeout%;查看以下内容:
参数名默认值介绍connect_timeout10用于连接超时时间单位为秒max_connect_errors100允许单用户连接错误最大值超过后在不刷新状态的情况下禁止再次连接max_user_connections0用户连接最大限制默认0表示无限制遵守总连接数小于等于max_connectionsmax_connections100MySQL支持的最大连接数innodb_lock_wait_timeout120事务等待获取资源等待的最长时间超过这个时间还未分配到资源则抛出异常单位为秒innodb_rollback_on_timeoutOFF在MySQL 5.65.7中默认值为OFF当InnoDB默认情况下仅回滚事务超时的最后一条语句。如果innodb_rollback_on_timeout值为ON则事务超时后将导致InnoDB中止并回滚整个事务slave_net_timeout60slave网络连接超时时间(当数据库使用主从时使用)
当出现连接数不够时可以通过指令SHOW VARIABLES LIKE %max_connections%;查看数据库配置的最大连接数。 如果您的程序并发较高但是数据连接数较小可以通过指令调大连接数或者更改数据库的配置文件my.cnf的max_connections参数。通过指令调大连接数:set global max_connections1000;将连接数调大到1000。如果您的连接数已经设置到了较大的数量还是出现连接数不够那么需要排查程序是否有问题就是下面的优化程序。 二、优化程序
由于我设置的连接数为2000并且系统的并发也不高。因此可以推测出是程序上的问题。通过指令SHOW FULL PROCESSLIST;查看MySQL服务器上的所有连接包括连接ID、用户、主机、当前执行的SQL语句等信息。 参数分析
参数名介绍ID用户登录mysql时系统分配的connection_idUSER当前用户HOST执行该SQL是由哪台机器操作的DB进程目前连接的数据库COMMAND当前连接的执行的命令一般取值为休眠sleep查询query连接connect等TIME状态持续时间单位为秒STATE当前连接的sql语句的状态INFO当前执行的SQL语句可以作为程序优化的重要条件
找出time时间过长的语句再查看当前state状态如果当前state是 Updating或者Sending data则表示当前正在执行查询或者修改操作并且执行时间过长。将INFO里的执行SQL信息拿出来加上Explain进行分析。大概率是因为SQL查询或者修改效率过低没走索引导致连接一直被占用最后出现连接数不够的情况。这种情况一般需要我们优化SQL增加索引即可解决问题。更多关于show processlist文章可以参考show processlist 史上最全参数详解及解决方案