我一直在运行经典的ASP / SQL Server 2008 R2 / Windows Server 2012 R2 / IIS 8大约10-15年;没问题。但我试图让这些相同的脚本在装有Windows Server 2016(IIS 10)和SQL Server 2017的新机器上运行,并且在与数据库的连接方面遇到了问题。(现在还不能在ASP.NET中重写它们)。
例如,我将创建一个到数据库的连接:
set conn = server.CreateObject("ADODB.Connection")
conn.ConnectionTimeout=120
conn.Open("Provider=sqloledb;Data Source=(local);Initial Catalog=myDatabase;Integrated Security=SSPI")
字符串
第一个问题,创建连接需要两秒钟(每个连接都需要两秒钟)。并且即使连接应该保持打开,后续的连接(相同的db;相同的连接字符串)在该页面或另一个页面上运行只需要两秒(即使我将ConnectionTimeout设置为120秒)。
第二个问题(更严重),在该连接上执行任何操作都需要两秒钟(几乎正好是两秒钟),即使它只是一行,例如:
sql = "update myTable set zipCode = 91839 where ID = 12345"
conn.execute(sql)
型
然后,如果我只对一行进行另一次更新(例如),则需要另外两秒(几乎正好两秒):
sql = "update myTable set zipCode = 02930 where ID = 67890"
conn.execute(sql)
型
使用以前的设置(SQL Server 2008 R2 / Windows Server 2012 R2 / IIS 8),创建连接需要几毫秒,然后像上面这样的简单更新需要1-2毫秒。但是现在每个连接和该连接上的每个操作都需要两秒+它应该花费的时间(例如,2ms)。
我猜是IIS 10中SQL Server连接的默认设置发生了变化,这就是导致问题的原因,但我不确定。顺便说一句,我在IIS中使用默认的IUSR帐户连接到SQL Server(无论是在旧的设置还是现在)。
1条答案
按热度按时间bpzcxfmw1#
由于我对这个问题的评论是正确的,我将把它作为其他人的答案:
请尝试对您的连接字符串进行以下更改(每一项或组合):
字符串
SSPI与SQLClient和OleDB都能很好地工作,这就是为什么它通常是首选的,但可能兼容性部分使它更慢,因为它试图优雅地使一切正确。从sqloledb到SQLNCLI11的提供程序部分更改强制引擎使用SQLClient,因为您很可能正在使用SQL Server,无需再次考虑兼容性(让我们切换到Oracle)。兼容性有时会影响性能。
参考文献:
What is the difference between Integrated Security = True and Integrated Security = SSPI?
Difference between Sql Connection and OLEDB Connection的