MySQL连接问题浅析
2015-12-24 10:48
441 查看
MySQL的客户端,无论是PHP或者Java,都会发起多个连接来提高系统的吞吐量。在云里面的服务器,因为一些设计和实现上的不同,有一些问题被放大了,同时也带了一些新的问题。
连接的超时时间
在Azure里面,所有的TCP连接都会通过Azure最外层的网络负载均衡器(SLB),负载均衡器有一个很短的空闲超时,缺省在几分钟。当连接超时的时候,负载均衡器不会通知TCP连接的两端,服务器和客户端都不会得到连接断开的通知。这个行为对许多连接池的实现带来了困扰。所以,对于连接超时时间我们的服务缺省设置为120秒,这个时间确定比负载均衡器的空闲超时要短来避免这个问题。
这个时间同时是对一个查询最长的执行时间。因为在查询的时候是没有网络流量的,负载均衡器会认为这个链接是空闲的。
连接池的使用和大小
我们的服务对于链接的建立做了很多优化,基本上建立一个新连接的时间和在本地的MySQL性能接近,但是新建一个连接的代价仍然是不可忽视的,我们建议使用连接池(JAVA)或者长连接(PHP)。实际代码的例子可以参考http://www.windowsazure.cn/documentation/articles/mysql-database-connection-pool
在使用连接池的时候,建议保持一个比较小的最小连接数,这个数字可以通过观察实际应用的平均压力来确定。
连接池最大的链接数是需要通过对应用程序进行性能压力测试以后决定的。在大多数的情况下,我们服务多个版本(MS1-4)的链接数限制并不是最佳性能的链接数,往往更少的链接数能达到更好的性能。比如MS4的链接数限制是750,但它的最佳的输出性能一般发生在链接数在150-200之间,当然这个值和实际的数据库以及查询有非常大的相关性。
连接的超时时间
在Azure里面,所有的TCP连接都会通过Azure最外层的网络负载均衡器(SLB),负载均衡器有一个很短的空闲超时,缺省在几分钟。当连接超时的时候,负载均衡器不会通知TCP连接的两端,服务器和客户端都不会得到连接断开的通知。这个行为对许多连接池的实现带来了困扰。所以,对于连接超时时间我们的服务缺省设置为120秒,这个时间确定比负载均衡器的空闲超时要短来避免这个问题。
这个时间同时是对一个查询最长的执行时间。因为在查询的时候是没有网络流量的,负载均衡器会认为这个链接是空闲的。
连接池的使用和大小
我们的服务对于链接的建立做了很多优化,基本上建立一个新连接的时间和在本地的MySQL性能接近,但是新建一个连接的代价仍然是不可忽视的,我们建议使用连接池(JAVA)或者长连接(PHP)。实际代码的例子可以参考http://www.windowsazure.cn/documentation/articles/mysql-database-connection-pool
在使用连接池的时候,建议保持一个比较小的最小连接数,这个数字可以通过观察实际应用的平均压力来确定。
连接池最大的链接数是需要通过对应用程序进行性能压力测试以后决定的。在大多数的情况下,我们服务多个版本(MS1-4)的链接数限制并不是最佳性能的链接数,往往更少的链接数能达到更好的性能。比如MS4的链接数限制是750,但它的最佳的输出性能一般发生在链接数在150-200之间,当然这个值和实际的数据库以及查询有非常大的相关性。
相关文章推荐
- MySQL连接问题浅析
- MySQL连接问题浅析
- mysql备份和恢复
- mysql 点赞取消点赞语句
- 关于mysql的limit用于分页查询的优化
- Windows操作系统下的MySQL主从复制及读写分离[转]
- 关于MySQL注释
- mysqldump导出指定表和部分指定数据
- mysql优化技术
- ubuntu mysql 配置文件my.cnf 更改tmp路径
- mysql组合索引与字段顺序
- mysql日志文件
- mysql无法导入sql语句
- mysql timestamp 修改 时间变化问题
- MySql高级二
- 为MySQL安装配置代理工具Kingshard的基本教程
- 10款最好用的MySQL数据库客户端图形界面管理工具
- mysql 版本
- Ubuntu10下MySQL搭建Amoeba_分片
- Ubuntu10下MySQL搭建Amoeba_分片升级版