Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 经典ASP-使用一个连接进行多个查询?_Sql Server_Asp Classic_Connection Pooling - Fatal编程技术网

Sql server 经典ASP-使用一个连接进行多个查询?

Sql server 经典ASP-使用一个连接进行多个查询?,sql-server,asp-classic,connection-pooling,Sql Server,Asp Classic,Connection Pooling,考虑一个在IIS6上运行的经典ASP站点,它有一个专用的SQL Server 2008后端 情景1: 打开连接 通过ASP页面进行15次查询、更新等 密切联系 情景2: 对于每个查询、更新等,打开和关闭连接 使用连接池,我的资金将用于场景2,因为它是最有效和可扩展的 我的假设正确吗 编辑:更多信息 这是数据库操作分散在许多asp代码中的单独函数,做单独的事情等。它不是连续快速完成15个查询。设想一个具有许多功能的大型站点,包括等等。在场景2中,应用程序和SQLServer之间有一个往返过程,用

考虑一个在IIS6上运行的经典ASP站点,它有一个专用的SQL Server 2008后端

情景1: 打开连接
通过ASP页面进行15次查询、更新等
密切联系

情景2: 对于每个查询、更新等,打开和关闭连接


使用连接池,我的资金将用于场景2,因为它是最有效和可扩展的

我的假设正确吗

编辑:更多信息
这是数据库操作分散在许多asp代码中的单独函数,做单独的事情等。它不是连续快速完成15个查询。设想一个具有许多功能的大型站点,包括等等。

在场景2中,应用程序和SQLServer之间有一个往返过程,用于执行每个查询,这会消耗服务器的资源,并且总执行时间会增加。
但在场景1中,只有一次往返,而且SQLServer将在一次内运行所有查询。因此,它速度更快,资源消耗更少

编辑:我想你指的是一次多个查询。

所以,在启用连接池的情况下,在每个事务之后关闭连接完全没有问题。因此,使用场景2,我相信默认的连接池大约是20个连接,但是SQLServer可以处理更多的连接。从服务器获取连接需要最长的时间(假设您没有对命令做任何愚蠢的事情),因此我认为在每页获取连接并在以后使用时终止连接没有什么错

对于可伸缩性,您可能会遇到以下问题:连接池太忙,脚本等待连接可用时超时,而数据库有100个备用连接,但没有人使用它们


在同一个页面上创建和杀死获得我的投票。

基本上,ASP页面是同步的。那么,为什么不在每次页面加载时打开连接一次,然后在每次页面加载时关闭连接一次呢?所有其他打开/关闭操作似乎都是不必要的。

最佳做法是打开连接一次,读取所有数据并尽快关闭连接。关闭连接后,可以对检索到的数据执行任何操作。在这种情况下,您不会打开太多的连接,也不会打开太长时间的连接


即使您的代码在多个地方有数据库调用,创建连接的开销也会比等待更糟糕——除非您说在服务器端创建页面需要很多秒?通常,即使没有受控的数据访问和许多功能,您的页面在服务器上生成的时间也不到一秒钟。

从性能角度看,没有明显的差异。ADODB连接池管理与数据库的实际连接。Adodb.connection.open和.close只是连接池的一个外观。实例化1个或15个adodb.connection对象实际上并不影响性能。在使用事务之前,我们将连接字符串与adodb.command(.activeConnection)结合使用,并且从不显式打开或关闭连接


显式保留adodb.connection引用的原因是事务或基于连接的函数,如mysql last_inserted_id()。在这些情况下,您必须绝对确定每个查询都获得相同的连接。

如果我理解正确,您正在考虑在各种包含中的各种函数中保存的复杂代码之间共享连接对象

在这种情况下,这将是一个坏主意。如果其他代码可能认为需要修改连接,则很难保证连接的状态和设置正确。此外,有时您可能会有获取firehose记录集的代码,并且在调用另一段同样需要连接的代码时尚未完成处理。在这种情况下,您无法共享连接


让每个原子代码块获得自己的连接会更好。连接将处于干净的已知状态。必要时,多个连接可以并行运行。正如其他人所指出的,底层连接池几乎完全降低了创建连接的成本。

Heinzi>>现场。这是数据库操作分散在许多asp代码中,在不同的函数中,做不同的事情等。我将尝试改进我的问题。好的,我的问题是错误的,现在通过您的编辑,问题更清楚了。