問題:
最大の顧客が作成したプログラムを使用して、注文の受け取り、輸送の予約、その他の注文関連の作業を行います。プログラムを使用する以外にチャンスはありません。お客様は、プログラムの問題に関して非常にサポートしていません。私たちはプログラムと一緒に暮らす必要があります。
現在、このプログラムは2人以上のユーザーで使用するとほとんどの場合非常に遅いので、カーテンの後ろを見て問題の原因を見つけようとしました。
私がこれまでに見つけたプログラムについてのいくつかのポイント:
- それはVB6.0で書かれています
- これは、1人のユーザーのマシン上のフォルダーにあるパスワードで保護された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を会社のファイルサーバーに配置しようとしましたが、ローカル共有よりもアクセスがさらに遅いという成功を収めました。また、クライアントのロックメカニズム(日和見ロック)を変更しようとしましたが、成功しませんでした。
私は何が起こっているのかを知りたいので、顧客の開発者がプログラムをより速くするのを助けるために、いくつかの難しい事実と提案が必要です。