同事买了阿里云四台服务器做负载均衡,连的Mysql数据库,访问量大时出现连接池已满的错误,经查购买数据库最大连接数是150...而.net默认最大100,所以4台服务器都连接就可能出现问题。关于mysql的连接字符串可参考以下网站:
https://www.connectionstrings.com/mysql-connector-net-mysqlconnection/
与此同时,我产生了一个疑问,程序何时会使用一个新的数据库连接?
起初我推测两个30秒的查询请求应该是两个连接,然而事实证明我错了...
开始测试(注意每次查询的内容要不一样):
页面有两个按钮A和B,A查询弄长点耗时30秒,B查询弄短点0秒
1.先点击B用时0秒,再点击A用时30秒,没有问题
2.先点击A,等一会点B,此时发现B速度变慢了,排到了A查询之后
3.A连点两下,感觉也是排队了
测试期间使用show PROCESSLIST可以看到程序一直使用的是一个连接,明显感觉到查询排队了。明明可以同时查询,为何要排队呢?有些不解,还有是否能够通过代码实现同时查询呢?请高手赐教。
居然没有新的数据库连接出现,于是我又推测应该是按客户端的端口号来使用连接的吧,再测一下:
1.浏览器1点击A按钮,浏览器2点击B,B变回0秒
2.浏览器1和2分别点击A按钮,使用命令可以看到建立了两个连接
最终推测结论:如果负载均衡每次都用新端口与IIS建立连接,那么查询就是并行的,连接池消耗也快。