我正在将Access 2010数据库升级到MS SQL-Server,我有一些奇怪的问题,只有在我打开多个查询时才会出现这种问题。我发现了这个问题,因为我有一个三个子表单的表单,打开速度很慢。然后我逐个删除了一个子表单,或者只是打开了测试查询。以下描述是我测试的结束。
为了描述问题,我们可以专注于三个查询,我称之为qA,qB和qC。每个查询都基于SQL-Server上的每个表,只有几条记录。这些表是链接表,它们通过这个连接字符串连接到SQL服务器(后来我发现这个连接字符串是错误的,这就是问题。我把它保留在这里,以便这个问题和答案仍然有意义。):
ODBC;DRIVER=SQL Server Native Client 11.0;SERVER=SERVER01;Trusted_Connection=Yes;DATABASE=AATest001;
目前Access和SQL-Server都在一台高性能PC上运行。
如果我只打开qA或仅打开qB或仅打开qC,则每个查询立即打开。但是如果我打开qA然后qB然后qC那么整个过程变得很慢。第一个查询开始很快,下一个(大部分时间)也仍然很快。但是第三个查询需要大约10秒或更长时间才能打开。
如果我按照A,B,C或C,B,A或任何其他顺序打开它们并不重要。它始终是打开速度非常慢的最后一个查询。
如果我在打开查询之间等待10秒或更长时间,则无关紧要。如果两个查询已经打开,那么第三个查询将会很慢。即使我在打开第二个和第三个查询之间等了几分钟,第三个查询也会打开很慢。
如果我打开两个查询,然后关闭其中一个查询并再次打开另一个查询,则所有查询都可以快速完成。
我感谢任何答案,但也有可能提示如何进一步分析问题。我尝试过SQL Server Profiler(我知道的很少),但没有什么是显而易见的。
答案 0 :(得分:2)
我找到了答案,但我仍然觉得这很疯狂。
我重新检查了所有设置,发现链接表中的连接字符串没有使用“SQL Server Native Client 11.0”,因为我认为它会使用“DRIVER = SQL Server”。
将所有表更改为“SQL Server Native Client 11.0”后,不再存在性能问题。但这告诉我们标准的“DRIVER = SQL Server”是什么?这不应该没有问题吗?
我想添加一个更重要的信息:
当我将表从Access链接到SQL时,我使用了DSN文件。我虽然Access会使用该文件进行连接。但这只是部分正确,因为当我更改DSN文件(我启用了日志记录)后,这对我的链接表没有任何改变。
当Access链接表时,它会读取DSN文件中的连接字符串,然后将该连接字符串写入每个表的Connect属性中。之后,Access将忽略DSN文件。甚至可以删除DSN文件,Access也不会错过它。
我希望这可以帮助其他有类似问题的用户。