Microsoft JET SQL查询日志记录或"如何调试客户的程序?"

VVS*_*VVS 3 vb6 debugging ms-access trace jet

问题:

我们使用由我们最大的客户编写的程序来接收订单,预订运输和其他与订单相关的东西.我们没有其他机会,只能使用该程序,并且当涉及到他们的程序问题时,客户是非常不支持的.我们只需要接受该计划.

现在这个程序在与两个或更多用户一起使用时大部分时间都非常慢,所以我试着看看窗帘后面找到问题的根源.

关于我到目前为止发现的程序的一些观点:

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

我还使用Process Monitor监视文件访问,并找出程序速度如此之慢的原因:它在mdb文件上进行了数千次读取操作,即使程序空闲也是如此.通过网络,这当然非常缓慢:

Process Monitor Trace http://img217.imageshack.us/img217/1456/screenshothw5.png

真正的问题:

有没有办法监视负责读取活动的查询?我可以设置跟踪标志吗?挂钩JET DLL的?我想这个程序正在做一些昂贵的查询,导致JET在这个过程中读取大量数据.

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

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

小智 6

为了让你的贪婪掌握正是Access在幕后查询的内容,还有一个名为JETSHOWPLAN的未记录功能 - 当在注册表中打开时,它会创建一个showplan.out文本文件.详细信息在此TechRepublic文章 备用中,在 汇总:

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

\\HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\JET\4.0\Engines\Debug
Run Code Online (Sandbox Code Playgroud)

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

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

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

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