我已经运行经典的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")
第一个问题,创建连接需要2秒钟(对于每个连接,实际上是2秒钟)。即使该连接应该保持打开状态,该页或另一页上的后续连接(相同的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毫秒。但是现在,每个连接以及对该连接的每个操作都需要2秒钟+它应该花费的时间(例如2毫秒)。
我猜想IIS 10中SQL Server连接的默认设置已更改,这就是导致问题的原因,但是我不确定。顺便说一句,我正在使用IIS中的默认IUSR帐户连接到SQL Server(无论是在旧设置中还是现在)。
答案 0 :(得分:0)
根据我对这个问题的评论是正确的,我将其作为其他所有人的答案:
请尝试对连接字符串进行以下更改(每一项或多项更改):
Integrated Security=True Provider=SQLNCLI11
SSPI与SQLClient和OleDB都可以很好地工作,这就是为什么通常首选SSPI的原因,但是兼容性部分可能会使其变慢,因为它试图从容地使所有内容正确无误。提供程序部分从sqloledb更改为SQLNCLI11会强制引擎使用SQLClient,因为您很有可能正在使用SQL Server,而无需再次进行兼容性(让我们说切换到Oracle)。兼容性有时会降低性能。
参考文献:
What is the difference between Integrated Security = True and Integrated Security = SSPI?