MS Access 将链接表更改为 AWS MySQL Db 会减慢表单/报告的速度

Posted

技术标签:

【中文标题】MS Access 将链接表更改为 AWS MySQL Db 会减慢表单/报告的速度【英文标题】:MS Access changing linked table to AWS MySQL Db slows down forms/reports 【发布时间】:2019-09-23 19:55:15 【问题描述】:

我是一家公司的新角色,他们正在使用 MS Access 和 mysql 数据库,该数据库运行在我们办公室物理网络后面的服务器中。我受雇开发一个全新的应用程序,以使公司达到现代标准。当我们将功能/模块移动到我正在编写的新 Angular/NodeJs 应用程序时,用户仍然需要利用 MS Access 提供的 UI 来访问将在 AWS Lightsail 上的新生产数据库。 但是,当我更改 Ms Access 的配置、OBDC 连接以指向 AWS Lightsail MySQL Db 时,MS Access UI 中的所有内容(尤其是报告)变得比在办公室网络中指向 MySQL Db 时要慢.

我要去“链接表管理器”并更改“连接字符串”。 在我读到的某个地方,我应该确保禁用 SSLMODE 以消除任何性能问题。

DSN=AWS_Dev;DATABASE=ECSDataTables;PORT=3306;SERVER=IP_ADDRESS;SSLMODE=DISABLED;

我在 Windows 中浏览了普通的“ODBC 数据源管理器”,并正常添加了 MySQL AWS 主机、用户/密码。

我进行了广泛的研究并找到了几个来源,但没有一个真正有帮助。

我被要求不要花太多时间尝试修复/优化 MS Access 中的任何内容,因为我的重点应该放在新应用程序上,但很难相信 MySQL 数据库的简单切换会产生如此大的影响。在新的 Angular/NodeJs 应用程序中,一切都运行得非常快,所以我知道它不是 AWS MySQL 数据库或任何东西。

我是否遗漏了什么,我应该在 Ms Access 中进行的任何配置?我已经有大约十年没有使用过 VB 了,所以我希望在这方面不需要太多技术背景的情况下可以做一些事情。

谢谢。

【问题讨论】:

【参考方案1】:

嗯,问题是您的局域网 (LAN) 大约是您的互联网连接速度的 10 倍,甚至更快。

您的低成本办公网络很可能是 1 千兆位网络。 (100 碱基 T 很少见)。

但是,您的互联网高速连接可能是 10 mb。所以,你从 1000 到 10 - 慢了 100 倍。所以,3 秒现在变成了 300 秒。

我的意思是,连接速度这么慢,那么这里应该不会有什么惊喜。

对于客户端 sql 的复杂连接的任何报告,您可以做的是将 sql 查询转换为服务器端视图,链接到该视图。现在使用该视图作为报告的基本来源。当然,现有的 VBA 文件管理器(您总是使用(对吗???)来启动报告)现在只会从网络管道中提取它需要的数据。访问报告(或表格)只会拉下您要求的内容 - 而不是整个表格。因此,您拥有的任何过滤器(使用 open report 命令的 where 子句)都将受到尊重。因此,您要么必须提取更少的数据,要么只需找到与您的局域网具有相似速度等级的东西(这种高速互联网很少见)。

本文概述了 LAN 与 WAN 的概念和速度问题:

http://www.kallal.ca//Wan/Wans.html

虽然上面的文章已经很老了,但今天互联网的速度差异大约快了 10 倍,而本地区域也是如此,从 100 baseT 变为 1 gig bit base。

所以,事情会变慢,因为您使用的连接速度要慢得多。越慢越慢!!!

编辑

虽然如前所述,访问只会提取您所要求的内容,但访问客户端表现不佳的情况是涉及多个表的 sql 查询 - 通常客户端会弄乱它发送服务器端的内容。如前所述,这种情况下的解决方案是采用视图服务器端。这意味着您将驱动报表的客户端查询移动到视图,并链接到该视图。对于单个表查询,您不会获得太多性能,但是对于任何基于复杂(多表连接)的报告,然后使用视图将强制 sql 和“连接工作”发生在 sql server 端,这可能会导致巨大的性能提升。

【讨论】:

感谢您的回复。正如您所说,关于连接速度是有道理的......尽管此时我没有在新的 Angular 应用程序中运行复杂的报告来测试 MS Access 和新应用程序之间的差异。实际上,加载 Angular 应用程序所花费的时间可能与我将 MS Access 切换为指向 AWS 时所花费的时间相同。当我说 Angular App 运行速度非常快时,它是简单的数据库请求......和简单的选择。我没有考虑过创建视图。我绝对可以试试。 Angular 是在运行 Web 端还是客户端?在 100% 基于 Web 的 sql 查询中,将数据从 sql 服务器拉到 Web 服务器(在数据拉到客户端(Web 服务器)之间没有慢速网络)。然后页面被呈现为 HTML 并发送到客户端。从一百万行表中返回一行的查询只提取 1 条记录,应该可以正常工作。打开没有 where 子句的表单会提取太多记录。作为桌面客户端或 Access 以角度提取多少数据是您需要担心的开发人员选择。网站往往会更好,因为 Web 服务器和 sql 服务器之间不存在慢速网络。 Angular 用于客户端。 NodeJS 作为 REST API 运行。我正在过渡到 GraphQL 以进行更好的优化。我尝试了您使用视图的建议,似乎它的工作速度要快得多:) 它加载了一个以前大约需要 10-12 秒的查询,现在大约需要 2 秒 :) 尝试使用 Access 很痛苦。再次感谢。 不确定 Angular 是否可以运行服务器端。作为客户端技术,那么将数据拉到客户端的问题将与 Access 作为客户端的问题大致相同。至于 Access 很难使用链接表或链接视图?不知道为什么,但是使用一个简单的链接表,您甚至不必编写代码来布局和启动报表。 Access 是一个简单的桌面系统,用途广泛,而 Access 如此受欢迎的 99% 的原因在于它不仅简单易用。【参考方案2】:

这是一个例子,有限的知识只会产生比预期更糟糕的结果。 多年来,*** DBA 只是“讨厌” Access 女士……他们只看到问题,你说出它的名字……最后一句话是“切换到真正的数据库引擎”。 好吧,这造成了一个错误的假设,即 MsSQL、MySQL、Oracle、PostGreSQL 和其他数据库引擎在某种程度上是一种“神奇药丸”……您只需将 BE 切换到上述 DBE 之一,您的所有问题都会得到解决.. . 就这样。DBE --Database Engine(如果您想调用其他名称,请随意)错误 Access 女士遵循与 DBE 不同的理念,鉴于其所有缺点以及基于文件的 DBE 的主要事实,它的工作做得非常好。 切换到另一个 DBE 将提供惊人的性能,如果且仅当您尊重您不使用 Access 的事实......只是不要对待例如MySQL 作为您的文件存储库,不要只是链接表并期望一切顺利... 想要继续责怪 Access ...只需切换到另一个平台(.NET、php、Js、Java...自己选择)...然后做一个像您一样一次性提取所有数据的小型应用程序使用 Access 。它肯定会崩溃或消失没有响应... 所以不要再责怪 Access ...开始阅读如何充分利用两个世界,我很确定结果会让您感到惊讶....但我必须再次强调,这不是一个“神奇的药丸”解决方案。 ..它涉及很多工作...规划、数据操作、规范化、代码更改,最重要的是理念的改变.. 我建议通过选择这本书来开始旅程:https://www.amazon.com/Microsoft-Access-Developers-Guide-Server/dp/0672319446(我不想抱怨它的 Old 和 MsSQL ......先阅读然后再抱怨) 还可以看一下我几年前制作的类似基准的旧视频:https://www.linkedin.com/posts/tsgiannis_a-small-demo-of-connecting-ms-access-fe-to-activity-6392696633531858944-dsuU 最后但同样重要的是......几年前,我正在做一些测试,看看“神奇药丸”会对我公司的应用程序产生什么影响......最简单的测试...... 一个包含少量字段但包含大约 800 万条记录的简单表...只需显示它 访问 BE(本地)--> 它将在 1-2 秒内运行......这很快 访问 BE(网络共享)--> 它会在几秒钟内运行......不是那么快,但它是可用的 MSSQL BE(链接表)-->有时它会得到结果,有时它不会..慢...真的很慢..就像您煮咖啡然后散个步一样。 MySQL BE(链接表)--> 它从未完成...“未响应”超时 PostGreSQL BE(链接表)--> 它从未完成...“未响应”超时

所以不要再责怪 Access...开始工作并感到惊讶....

【讨论】:

欣赏有见地的评论。我敢肯定,如果我对 Access 有更多了解,我不会问这个问题,但如前所述,我受雇为公司创建一个新平台,并开始使用更新的工具和技术。因此,我并没有被要求学习很多关于 Access 的知识,而只是为了使过渡顺利进行,并且在我慢慢地将所有模块/功能过渡到新平台时仍然具有与 Access 的向后兼容性。再次感谢。 这不是 Access 的问题...这是哲学问题...我认为您是 Web 开发人员...所以当您从数据库中提取数据时,您只需提取 50,100...200最多一次......(我知道虚拟滚动......下面的引擎只是为你做)......如果你改变访问以提取相同的最少数据量,它会非常快。

以上是关于MS Access 将链接表更改为 AWS MySQL Db 会减慢表单/报告的速度的主要内容,如果未能解决你的问题,请参考以下文章

将数据导入报表后,链接工作表更改为只读

拥有一个 MS Access 数据库作为 MySQL 的实时供稿

MS Access 链接表自动长整数

加载包含链接的 sql server 表的 mdb 时 ms 访问崩溃

使用 ng-repeat 将静态表更改为动态表

将 hive 外部表更改为同一数据库中的内部表也会从另一个表中删除数据