当从 Windows XP 客户端使用 Windows 身份验证时,我们的 MS Access 应用程序与 SQL Server 2005 的链接表很慢。
我们一直在使用 SQL Server 身份验证成功运行它,但现在我们想要迁移到 Windows 身份验证以获得更好的安全控制。
设置:
- 数据库服务器:Windows 2003 Server、SQL Server 2005 SP2
- 客户端:Windows XP SP3,SQL Server ODBC 驱动程序 v2000.85.1132.00
- MS Access 应用程序:MS Access 2003
- 连接字符串:
DRIVER=SQL Server;SERVER=[server name];Connect Timeout=300;Trusted Connection=True;APP=Microsoft Office 2003;WSID=[server name];DATABASE=[db name]
- 服务器上仅启用 TCP/IP 网络协议。
在这些情况下不会发生缓慢:
- 数据库服务器上的应用程序,SQL Server 身份验证
- 数据库服务器上的应用程序,Windows 身份验证
- Windows XP 客户端上的应用程序,SQL Server 身份验证
- 客户端上的 SQL Server Management Studio,Windows 身份验证 - 我做了一个小测试,在 SQL MS 中运行了 15 个查询。这进展很快,并且没有在服务器上的安全事件日志中导致任何登录/注销事件。
我已经使用 SQL Server Profiler 和服务器上的事件日志分析了缓慢,它似乎归结为:
- 应用程序运行查询
- 与 SQL Server 的新连接已打开(在 SQL Server Profiler 中可见)
- 验证用户的身份(在服务器上的安全事件日志中可见,发生登录/注销事件)。这需要数百毫秒。
- 查询在 SQL Server 上运行
- 结果返回到 Access
每个查询都会发生这种情况。某些表单在显示新记录时会运行 +- 10 次查询(更新子表单、加载组合的值等)。这会导致性能非常缓慢。
当然,不必为每个查询都建立与 SQL Server 的新连接,重用连接可能会解决问题。我一直在寻找有关如何确保 Access/ODBC 进行正确连接池的信息。我找到了这些 MS 知识库文章:
关于 ODBC 连接池的常见问题解答
如何在 ODBC 应用程序中启用连接池
我尝试从 Access 应用程序的主窗体中调用 SQLSetEnvAttr 函数,但这并没有改善结果。
任何帮助是极大的赞赏。