Microsoft JET SQL查询日志记录或者"如何调试客户程序?"
问题:
我们使用最大客户编写的程序来接收订单,预订运输和做其他与订单有关的事情。我们没有其他机会,只能使用该程序,并且客户在遇到程序问题时非常不支持。我们只需要使用该程序即可。
现在,与两个或者多个用户一起使用时,该程序在大多数情况下都非常慢,因此我试图躲在幕后,找出问题的根源。
到目前为止,我发现了该程序的一些要点:
- 用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放在我们公司的文件服务器上,并获得了成功,因为它比在本地共享上访问速度还要慢。我还尝试了更改客户端上的锁定机制(机会锁定),但没有成功。
我想知道发生了什么,并需要一些困难的事实和建议,以帮助我们的客户的开发人员帮助他/她加快编程速度。
解决方案
没有开发人员的帮助,这是不可能的。对不起。
第一个问题:我们是否拥有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是正确的,我们非常需要能够在开发人员的源代码上运行调试器,以准确了解实时查询在做什么……
我们能不能在网络上扔一个数据包嗅探器(如Wireshark)并监视一个用户与主机之间的通信?
如果它使用ODBC连接,则可以为此启用日志记录。
- 启动ODBC数据源管理器。
- 选择"跟踪"选项卡
- 选择立即开始跟踪按钮。
- 选择"应用"或者"确定"。
- 暂时运行该应用程序。
- 返回到ODBC管理器。
- 选择"跟踪"选项卡。
- 选择立即停止跟踪按钮。
- 可以在我们最初在"日志文件路径"框中指定的位置中查看跟踪。
为了使肮脏手准确地了解Access在后台进行的查询操作,有一个未记录的功能,称为JETSHOWPLAN,当在注册表中打开时会创建一个showplan.out文本文件。详细信息在
这篇TechRepublic文章。
为了追踪梦m问题,这是无与伦比的,这是我们从大型昂贵的工业数据库中获得的东西,此功能很酷,它既可爱又蓬松,是我的朋友;-)