打开多个查询时访问 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

访问不允许SQL-Server列中的空值的INSERT或UPDATE(访问运行时错误3162)

如何使用 sql-server 后端处理访问中的表单引用查询

访问外网很慢,怎么办?

SQL-Server 视图中的 JAva 查询

OleDbConnection 处理很慢(2s)