我们使用由我们最大的客户编写的程序来接收订单,预订运输和其他与订单相关的内容。我们没有其他机会,只能使用该程序,并且当涉及到他们的程序问题时,客户是非常不支持的。我们只需要参与该计划。
现在这个程序在与两个或更多用户一起使用时大部分时间都非常慢,所以我试着看看窗帘后面找到问题的根源。
我还使用Process Monitor来监视文件访问,并找出程序速度如此之慢的原因:它在mdb文件上进行了数千次读取操作,即使程序空闲也是如此。在网络上,这当然非常缓慢:
Process Monitor Trace http://img217.imageshack.us/img217/1456/screenshothw5.png
有没有办法监控负责读取活动的查询?我可以设置跟踪标志吗?挂钩JET DLL的?我想这个程序正在做一些昂贵的查询,导致JET在这个过程中读取大量数据。
PS:我已经尝试将mdb放在我们公司的文件服务器上,但访问它的成功甚至比本地共享更慢。我也尝试在客户端上更改锁定机制(机会锁定)但没有成功。
我想知道发生了什么,需要一些有关我们客户开发人员的事实和建议,以帮助他/她更快地完成程序。
答案 0 :(得分:6)
为了让你的贪婪掌握正是Access正在查询的幕后操作,还有一个名为JETSHOWPLAN的未记录功能 - 当在注册表中打开时,它会创建一个showplan.out
文本文件。细节是在
this TechRepublic article alternate,总结于此处:
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版本) time Jet编译查询。然后,您可以查看此文本文件以获取线索 到Jet如何运行您的查询。我们建议您通过更改密钥的值来禁用此功能 到
OFF
,除非您专门使用它。 Jet将该计划附加到 现有文件,最终,该过程实际上减慢了速度 下。仅在需要查看特定内容时打开该功能 查询计划。打开数据库,运行查询,然后禁用 特征
为了追踪噩梦问题,它是无与伦比的 - 这是你在昂贵的大型工业数据库上得到的东西 - 这个功能很酷 - 它很可爱又蓬松 - 这是我的朋友......; - )
答案 1 :(得分:1)
您是否可以在网络上抛出数据包嗅探器(如Wireshark)并观察一个用户与主机之间的流量?
答案 2 :(得分:1)
如果它使用ODBC连接,您可以为其启用日志记录。
答案 3 :(得分: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是正确的,您几乎需要能够在开发人员的源代码上运行调试器,以确切了解实时查询正在做什么......
答案 4 :(得分:-1)
没有开发者的帮助是不可能的。遗憾。