5

问题:

我们使用我们最大的客户编写的程序来接收订单、预订运输和做其他与订单相关的事情。我们没有其他机会,只能使用该程序,当涉及到他们的程序问题时,客户非常不支持。我们只需要接受这个程序。

现在这个程序在有两个或更多用户使用时,大部分时间都非常慢,所以我试图在幕后寻找问题的根源。

到目前为止我发现的程序的一些要点:

  • 它是用 VB 6.0 编写的
  • 它使用一个受密码保护的 Access-DB (Access 2000 MDB),它位于一个用户机器上的一个文件夹中。
  • 该文件夹通过网络共享并由所有其他用户使用。
  • 它使用 msjet40.dll 版本 4.00.9704 与访问进行通信。我猜是ADO?

我还使用Process Monitor来监视文件访问,并找出程序如此缓慢的原因:即使程序处于空闲状态,它也在对 mdb 文件执行数千次读取操作。在网络上,这当然非常慢:

进程监视器跟踪 http://img217.imageshack.us/img217/1456/screenshothw5.png

真正的问题:

有没有办法监控负责读取活动的查询?我可以设置跟踪标志吗?挂钩 JET DLL 的?我猜该程序正在执行一些昂贵的查询,导致 JET 在此过程中读取大量数据。

PS:我已经尝试将mdb放在我们公司的文件服务器上,成功访问它甚至比通过本地共享还要慢。我还尝试更改客户端上的锁定机制(机会锁定),但没有成功。

我想知道发生了什么,需要为我们客户的开发人员提供一些确凿的事实和建议,以帮助他/她更快地完成程序。

4

5 回答 5

10

为了让您的肮脏手确切地了解 Access 在幕后以查询方式执行的操作,有一个名为 JETSHOWPLAN 的未记录功能 - 当在注册表中打开时,它会创建一个showplan.out文本文件。详细信息在 这篇 TechRepublic 文章 备用,总结如下:

ShowPlan 选项已添加到 Jet 3.0,并生成一个包含查询计划的文本文件。(ShowPlan 不支持子查询。)您必须通过向注册表添加 Debug 键来启用它,如下所示:

\\HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\JET\4.0\Engines\Debug

在新的 Debug 键下,添加一个名为的字符串数据类型JETSHOWPLAN (必须全部使用大写字母)。然后,添加键值ON以启用该功能。如果 Access 一直在后台运行,则必须将其关闭并重新启动才能使该功能正常工作。

启用 ShowPlan 后,Jet 每次编译查询时都会创建一个名为SHOWPLAN.OUT (最终可能位于您的My Documents文件夹或当前默认文件夹中,具体取决于您使用的 Jet 版本)的文本文件。然后,您可以查看此文本文件以获取有关 Jet 如何运行您的查询的线索。

我们建议您通过将键的值更改为来禁用此功能,OFF除非您专门使用它。Jet 将计划附加到现有文件中,最终,该过程实际上减慢了速度。仅当您需要查看特定查询计划时才启用该功能。打开数据库,运行查询,然后禁用该功能。

对于追踪噩梦般的问题,它是无与伦比的——这是你在昂贵的大型工业数据库上得到的那种东西——这个功能很酷——它可爱又蓬松——它是我的朋友……;-)

于 2009-04-23T14:11:35.840 回答
1

你能不能在网络上扔一个数据包嗅探器(比如 Wireshark)来观察一个用户和主机之间的流量?

于 2009-02-05T22:31:26.683 回答
1

如果它使用 ODBC 连接,您可以为此启用日志记录。

  1. 启动 ODBC 数据源管理器。
  2. 选择跟踪选项卡
  3. 选择立即开始跟踪按钮。
  4. 选择应用或确定。
  5. 运行应用程序一段时间。
  6. 返回 ODBC 管理器。
  7. 选择跟踪选项卡。
  8. 选择立即停止跟踪按钮。
  9. 可以在您最初在“日志文件路径”框中指定的位置查看跟踪。
于 2009-02-05T22:41:03.807 回答
0

第一个问题:您有 MS Access 2000 或更高版本的副本吗?

如果是这样:当您说 MDB 受“密码保护”时,您的意思是当您尝试使用 MS Access 打开它时,您只会收到输入密码的提示,还是提示您输入用户名和密码?(或者给你一条错误消息,“你没有使用 foo.mdb 对象的必要权限。”?)

如果是后者(用户级安全性),请查找与 MDB 一起提供的相应 .MDW 文件。如果你找到了,这就是“工作组信息文件”,它被用作打开MDB的“钥匙”。尝试使用以下目标创建桌面快捷方式:

"Path to MSACCESS.EXE" "Path To foo.mdb" /wrkgrp "Path to foo.mdw"

MS Access 然后会提示您输入您的用户名和密码(希望)与 VB6 应用程序要求您输入的相同。这至少可以让您打开 MDB 文件并查看表结构,看看是否有任何明显的设计缺陷。

除此之外,据我所知,Eduardo 是正确的,您几乎需要能够在开发人员的源代码上运行调试器以准确了解实时查询在做什么......

于 2008-10-03T21:35:13.363 回答
-1

没有开发人员的帮助是不可能的。对不起。

于 2008-10-03T15:24:35.997 回答