打开多个查询时访问 SQL-Server 很慢
Posted
技术标签:
【中文标题】打开多个查询时访问 SQL-Server 很慢【英文标题】:Access SQL-Server slow when opening multiple queries 【发布时间】:2015-05-14 05:20:14 【问题描述】:我正在将 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(我对它知之甚少),但没有什么明显的。
【问题讨论】:
【参考方案1】:我找到了答案,但我仍然认为这很疯狂。
我重新检查了所有设置,发现链接表中的连接字符串没有像我想的那样使用“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 不会错过它。
我希望这对其他有类似问题的用户有所帮助。
【讨论】:
使用 SQL Server Native Client 11.0 的技巧也解决了我的链接表的性能问题 - 谢谢。有趣的是,该问题仅针对 SQL Server 的本地实例出现,并显示表链接是指“localhost”还是命名实例。当链接到 AD 受信任域内的联网服务器时,没有问题。以上是关于打开多个查询时访问 SQL-Server 很慢的主要内容,如果未能解决你的问题,请参考以下文章
访问不允许SQL-Server列中的空值的INSERT或UPDATE(访问运行时错误3162)