MySQL查看最大连接数和修改最大连接数
1、查看最大连接数
show variables like '%max_connections%';
2、修改最大连接数
set GLOBAL max_connections = 200;或修改MySQL配置文件my.ini 或 my.cnf的参数max_connections,将其改为max_connections=??,然后重启MySQL即可。
通常,mysql的最大连接数默认是100, 最大可以达到16384。
mysql服务器最大连接数值的设置
这个参数的大小要综合很多因素来考虑,比如使用的平台所支持的线程库数量(windows只能支持到2048)、服务器的配置(特别是内存大小)、每个连接占用资源(内存和负载)的多少、系统需要的响应时间等。
Can not connect to MySQL server. Too many connections -mysql 1040错误,这表示MySQL且还未释放的连接数目已经达到MySQL的上限。
对于mysql服务器最大连接数值的设置范围比较理想的是:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高.
公式:Max_used_connections / max_connections * 100%
如图:
![](https://img2020.cnblogs.com/blog/45323/202009/45323-20200919100304197-741303688.png)
计算得到,差不多在5.3%作用,所以最大连接数设置有些偏高。可以适当的降低
设置方法:vim /etc/my.cnf 然后添加一句 max_connections=80
这个时候设置的是最理想的。
当然在现实项目中,出现高并发的问题,不可能按着当前的服务器响应最大连接数去设置,应该将最大连接数设置到最大,等项目差不多稳定了,或者在日志中分析出,高并发的数量,从而去调整最大连接数。
什么是数据库连接池
建立一个数据库连接是一件非常耗时(消耗时间)耗力(消耗资源)的事情。之所以会这样,是因为连接到数据库服务器需要经历几个漫长的过程:建立物理通道(例如套接字或命名管道),与服务器进行初次握手,分析连接字符串信息,由服务器对连接进行身份验证,运行检查以便在当前事务中登记等等。我们先不管为什么会有这样的机制,存在总是有它的道理。既然新建一条连接如此痛苦,那么为什么不重复利用已有的连接呢?
连接池就是这样一个容器:它存放了一定数量的与数据库服务器的物理连接。因此,当我们需要连接数据库服务器的时候,只需去池(容器)中取出一条空闲的连接,而不是新建一条连接。这样的话,我们就可以大大减少连接数据库的开销,从而提高了应用程序的性能。
Durid
Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴巴开发的号称为监控而生的数据库连接池!
Druid是一个JDBC组件,它包括三个部分:
基于Filter-Chain模式的插件体系。
DruidDataSource 高效可管理的数据库连接池。
SQLParser(ast全称是abstract syntax tree,中文直译抽象语法树。SQL解析,本质上就是把SQL字符串给解析成ast,也就是说SqlParser的入参是SQL字符串,结果就是一个ast。)
Druid的功能
1、替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
2、可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
3、数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
4、SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
5、扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。
所以Druid可以:
1、充当数据库连接池。
2、可以监控数据库访问性能
3、获得SQL执行日志
Druid配置使用(springboot下)
1.pom添加引用
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <!--自启动Druid管理后台--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
2.application.properties配置
### db config ### spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driverClassName=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://localhost:5432/XXX?useUnicode=true&characterEncoding=utf8¤tSchema=public spring.datasource.username=postgres spring.datasource.password=XXX spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.hbm2ddl.auto=update #config druid #连接池的设置 #初始化时建立物理连接的个数 spring.datasource.druid.initial-size=5 #最小连接池数量 spring.datasource.druid.min-idle=5 #最大连接池数量 maxIdle已经不再使用 spring.datasource.druid.max-active=20 #获取连接时最大等待时间,单位毫秒 spring.datasource.druid.max-wait=60000 #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 spring.datasource.druid.test-while-idle=true #既作为检测的间隔时间又作为testWhileIdel执行的依据 spring.datasource.druid.time-between-eviction-runs-millis=60000 #销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接 spring.datasource.druid.min-evictable-idle-time-millis=30000 #用来检测连接是否有效的sql 必须是一个查询语句 #mysql中为 select 'x' #oracle中为 select 1 from dual spring.datasource.druid.validation-query=select 'x' #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true spring.datasource.druid.test-on-borrow=false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true spring.datasource.druid.test-on-return=false #当数据库抛出不可恢复的异常时,抛弃该连接 spring.datasource.druid.exception-sorter=true #是否缓存preparedStatement,mysql5.5+建议开启 #spring.datasource.druid.pool-prepared-statements=true #当值大于0时poolPreparedStatements会自动修改为true spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20 #配置扩展插件 spring.datasource.druid.filters=stat,wall #通过connectProperties属性来打开mergeSql功能;慢SQL记录 spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 #合并多个DruidDataSource的监控数据 spring.datasource.druid.use-global-data-source-stat=true #设置访问druid监控页的账号和密码,默认没有 #spring.datasource.druid.stat-view-servlet.login-username=admin #spring.datasource.druid.stat-view-servlet.login-password=admin ### mybatis config ### mybatis.config-locations=classpath:mybatis/mybatis-config.xml mybatis.mapper-locations=classpath:mybatis/mapper/*.xml mybatis.type-aliases-package=com.jrsc.supervisor.model ### log config ### logging.config=classpath:logback-spring.xml
3.输入http://localhost:9091/druid/webapp.html后,即可看到Druid监控面板