[英]Microsoft JET SQL Query Logging or “How do I debug my customer's program?”
我們使用由我們最大的客戶編寫的程序來接收訂單,預訂運輸和其他與訂單相關的東西。 我們沒有其他機會,只能使用該程序,並且當涉及到他們的程序問題時,客戶是非常不支持的。 我們只需要接受該計划。
現在這個程序在與兩個或更多用戶一起使用時大部分時間都非常慢,所以我試着看看窗簾后面找到問題的根源。
我還使用Process Monitor監視文件訪問,並找出程序速度如此之慢的原因:它在mdb文件上進行了數千次讀取操作,即使程序空閑也是如此。 通過網絡,這當然非常緩慢:
Process Monitor Trace http://img217.imageshack.us/img217/1456/screenshothw5.png
有沒有辦法監視負責讀取活動的查詢? 我可以設置跟蹤標志嗎? 掛鈎JET DLL的? 我想這個程序正在做一些昂貴的查詢,導致JET在這個過程中讀取大量數據。
PS:我已經嘗試將mdb放在我們公司的文件服務器上,成功訪問它甚至比本地共享更慢。 我也嘗試在客戶端上更改鎖定機制(機會鎖定)但沒有成功。
我想知道發生了什么,需要一些有關我們客戶開發人員的事實和建議,以幫助他/她更快地完成程序。
為了讓你的貪婪掌握正是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會在每次Jet編譯查詢時創建一個名為
SHOWPLAN.OUT
的文本文件(最終可能會出現在“My Documents
文件夾或當前默認文件夾中,具體取決於您使用的Jet版本)。 然后,您可以查看此文本文件,以獲取有關Jet如何運行查詢的線索。我們建議您通過將密鑰值更改為
OFF
來禁用此功能,除非您專門使用它。 Jet將計划附加到現有文件,最終,該過程實際上減慢了速度。 僅在需要查看特定查詢計划時才啟用該功能。 打開數據庫,運行查詢,然后禁用該功能。
為了追蹤噩夢問題,這是無與倫比的 - 這是你在昂貴的大型工業數據庫上得到的東西 - 這個功能很酷 - 它很可愛又蓬松 - 這是我的朋友...... ;-)
您是否可以在網絡上拋出數據包嗅探器(如Wireshark)並觀察一個用戶與主機之間的流量?
如果它使用ODBC連接,則可以為其啟用日志記錄。
第一個問題:您是否擁有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是正確的,您幾乎需要能夠在開發人員的源代碼上運行調試器,以確切了解實時查詢正在做什么......
沒有開發人員的幫助是不可能的。 抱歉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.