2015-06-22 70 views
0

我希望能夠以某種方式標記SQL查詢,這樣我就可以將查詢執行與觸發查詢的Web請求關聯起來。我已經有了一個唯一的請求ID,我標記了我的日誌和其他監控,所以我可以輕鬆地在整個博客和新文章中進行完整跟蹤。標記SQL查詢

但是,當我查看長時間運行SQL查詢的報告時,例如,我無法追溯到觸發SQL查詢的請求。我真的很想能夠用我的請求ID以某種方式標記查詢。

我在網上找不到任何東西。當我搜索時,我只找到關於在SQL中存儲標籤和標籤雲的博客。不是我真正需要的。

希望這個問題有道理。

回答

0

這是一個非常有趣的帖子...

我希望,增加一個額外的可空參數存儲過程(S)將確保分析器會趕上在通話過程中通過唯一的ID(在跟蹤)是否在過程中使用該參數(即,執行一些有意義的事情......比如插入具有唯一標識,過程名稱,時間戳記等的審計表)。 但我認爲這會讓你生活困難,因爲你現在必須更新你的所有程序。

如果您已經開啓了日誌記錄功能(Web服務器),並且它的請求(日誌文件)中包含相同的唯一ID以及時間戳,那麼您可能會編寫一個小型實用程序應用程序來讀取日誌文件並查找匹配跟蹤表中的條目僅由時間戳記。 唯一可能出錯的是如果你的Web服務器和數據庫服務器有不同的時間(你需要相應地抵消你的計算)。

我不知道這是否會有所幫助,但它肯定是一個非常有趣的項目,我希望有人經歷過這件事,並提出了一個很好的解決方案。 將密切關注這個帖子,如果這樣的解決方案存在....

所有最好的...

+0

嗯......不是所有的訪問都是通過存儲過程完成的。事實上,這是一個老式的遺留系統,有數千個查詢,有些是動態生成的。現在我可以想到的一個步驟就是連接字符串被提取。我可以向連接字符串添加額外的元數據嗎? –

+0

我不知道底層提供程序是否會解析額外的信息......但您當然可以使用裝飾模式從SqlClient繼承並向其添加自定義屬性以唯一標識連接並使用此專用類代替SqlClient。 .. – SKG

+0

對不起,我的意思是SqlConnection ... – SKG

0

如果我理解正確的話,你想跟進活動監視器中的查詢執行。但是你有沒有考慮過使用DMV或SQL PROFILER?

在我看來,你最好的選擇是把它包裝在存儲過程中。這樣你就可以只爲這個對象過濾你的蹤跡。這裏我們選擇包裹在一個名爲sproc1存儲過程的一個簡單的選擇和同樣的例子:

enter image description here

正如你可以在此看到圖像,你可以啓動SQL事件探查器跟蹤和過濾它的對象名。然後,您可以添加其他列如CPU,StartTime,...

如果不能使用存儲過程,那麼我會建議的高管這樣之前插入註釋:

/* ID1234 */ 
select * from table1 

然後使用SQL事件探查器以同樣的方式,但你現在使用的過濾器的TextData您的ID

enter image description here

下面的結果:

enter image description here

+0

嗨PollusB,使用分析器是我會做的事情當查詢已被確定。現在我只需要確定一個查詢並將其與Web請求進行匹配。 –

+0

告訴我更多關於網絡請求的信息。告訴我更多關於你實際做什麼或者計劃如何一步一步做的事情,以便我可以調整我的答案。你可以更改源代碼嗎? – PollusB