4 个解决方案
#1
3万人访问网站,这个参数有50估计也够了。谁跟你说必须32000多呢?
这个是连接池大小。连接池满,说明你的查询效率极低(不能在百十来毫秒内结束),或者是你没有及时立刻关闭数据库逻辑连接。特别是这后者,是个编程大 bug。编程中应该使用
有些人想当然地搞什么“共享一个连接”的设计,其实他不懂“连接池”机制。它独占一个或者多个连接,而不及时把连接释放给连接池,自然就会让连接池出现“满”的异常。
这个是连接池大小。连接池满,说明你的查询效率极低(不能在百十来毫秒内结束),或者是你没有及时立刻关闭数据库逻辑连接。特别是这后者,是个编程大 bug。编程中应该使用
using(var conn= new SqlConnection(connString))这样的语法结构,来保证及时关闭逻辑连接,保证将数据库物理连接尽快分配给其它的逻辑连结。
{
conn.Open();
.......
}
有些人想当然地搞什么“共享一个连接”的设计,其实他不懂“连接池”机制。它独占一个或者多个连接,而不及时把连接释放给连接池,自然就会让连接池出现“满”的异常。
#2
如果设置参数为32767,那么几千万人同时在线访问也足够。关键是单机(单服务器)根本到不了这个访问量。
#3
网页运行时是无状态的、异步的。你可以想想看,你在看这个 csdn 页面时,就算是所有的查询操作都是从直接访问数据库(而不将99%的请求从数据缓存中来实现),那么你看页面的10分钟之内,访问数据库的时间不过也只有零点零几秒钟。
所以说几千人访问、几万人访问,连接池中的最大连接数量有50也就够了。单纯去百度,你只能了解一个初步的名词儿概念。此时容易被误导。
将来在开发中,如果你遇到了“连接池满”的问题,那就要从自己的编程开发角度去解决。
默认的设置值200,这个参数基本上是不需要调整的。
所以说几千人访问、几万人访问,连接池中的最大连接数量有50也就够了。单纯去百度,你只能了解一个初步的名词儿概念。此时容易被误导。
将来在开发中,如果你遇到了“连接池满”的问题,那就要从自己的编程开发角度去解决。
默认的设置值200,这个参数基本上是不需要调整的。
#4
你可以先了解一下什么是数据库的连接池。当然, 上面P哥已经讲了很多了, 我也不再赘述。
回你的疑问来:
既然有成千上万的人访问, 那数据库是如何应付的?
虽然访问的人有那么多(假设1万人), 但是他们不可能在一瞬间同时访问数据库, 大部分有先有后, 有时可能还在思考或者不做一些其它不涉及数据库访问的操作。
所以有1万人在访问你的网站的话,一般情况下, 一瞬间并发访问数据库的只需要几十上百个连接。
当然, 你也可以改大一点(最大不超过 500)——如果有那种抢购之类的功能。
如果你的服务器内存够大, 可以用 sqlserver2014 的内存数据库, 这个的处理能力非常强大。
回你的疑问来:
既然有成千上万的人访问, 那数据库是如何应付的?
虽然访问的人有那么多(假设1万人), 但是他们不可能在一瞬间同时访问数据库, 大部分有先有后, 有时可能还在思考或者不做一些其它不涉及数据库访问的操作。
所以有1万人在访问你的网站的话,一般情况下, 一瞬间并发访问数据库的只需要几十上百个连接。
当然, 你也可以改大一点(最大不超过 500)——如果有那种抢购之类的功能。
如果你的服务器内存够大, 可以用 sqlserver2014 的内存数据库, 这个的处理能力非常强大。
#1
3万人访问网站,这个参数有50估计也够了。谁跟你说必须32000多呢?
这个是连接池大小。连接池满,说明你的查询效率极低(不能在百十来毫秒内结束),或者是你没有及时立刻关闭数据库逻辑连接。特别是这后者,是个编程大 bug。编程中应该使用
有些人想当然地搞什么“共享一个连接”的设计,其实他不懂“连接池”机制。它独占一个或者多个连接,而不及时把连接释放给连接池,自然就会让连接池出现“满”的异常。
这个是连接池大小。连接池满,说明你的查询效率极低(不能在百十来毫秒内结束),或者是你没有及时立刻关闭数据库逻辑连接。特别是这后者,是个编程大 bug。编程中应该使用
using(var conn= new SqlConnection(connString))这样的语法结构,来保证及时关闭逻辑连接,保证将数据库物理连接尽快分配给其它的逻辑连结。
{
conn.Open();
.......
}
有些人想当然地搞什么“共享一个连接”的设计,其实他不懂“连接池”机制。它独占一个或者多个连接,而不及时把连接释放给连接池,自然就会让连接池出现“满”的异常。
#2
如果设置参数为32767,那么几千万人同时在线访问也足够。关键是单机(单服务器)根本到不了这个访问量。
#3
网页运行时是无状态的、异步的。你可以想想看,你在看这个 csdn 页面时,就算是所有的查询操作都是从直接访问数据库(而不将99%的请求从数据缓存中来实现),那么你看页面的10分钟之内,访问数据库的时间不过也只有零点零几秒钟。
所以说几千人访问、几万人访问,连接池中的最大连接数量有50也就够了。单纯去百度,你只能了解一个初步的名词儿概念。此时容易被误导。
将来在开发中,如果你遇到了“连接池满”的问题,那就要从自己的编程开发角度去解决。
默认的设置值200,这个参数基本上是不需要调整的。
所以说几千人访问、几万人访问,连接池中的最大连接数量有50也就够了。单纯去百度,你只能了解一个初步的名词儿概念。此时容易被误导。
将来在开发中,如果你遇到了“连接池满”的问题,那就要从自己的编程开发角度去解决。
默认的设置值200,这个参数基本上是不需要调整的。
#4
你可以先了解一下什么是数据库的连接池。当然, 上面P哥已经讲了很多了, 我也不再赘述。
回你的疑问来:
既然有成千上万的人访问, 那数据库是如何应付的?
虽然访问的人有那么多(假设1万人), 但是他们不可能在一瞬间同时访问数据库, 大部分有先有后, 有时可能还在思考或者不做一些其它不涉及数据库访问的操作。
所以有1万人在访问你的网站的话,一般情况下, 一瞬间并发访问数据库的只需要几十上百个连接。
当然, 你也可以改大一点(最大不超过 500)——如果有那种抢购之类的功能。
如果你的服务器内存够大, 可以用 sqlserver2014 的内存数据库, 这个的处理能力非常强大。
回你的疑问来:
既然有成千上万的人访问, 那数据库是如何应付的?
虽然访问的人有那么多(假设1万人), 但是他们不可能在一瞬间同时访问数据库, 大部分有先有后, 有时可能还在思考或者不做一些其它不涉及数据库访问的操作。
所以有1万人在访问你的网站的话,一般情况下, 一瞬间并发访问数据库的只需要几十上百个连接。
当然, 你也可以改大一点(最大不超过 500)——如果有那种抢购之类的功能。
如果你的服务器内存够大, 可以用 sqlserver2014 的内存数据库, 这个的处理能力非常强大。