2008-08-12 71 views
6

傑夫的播客之一提到,他總是不放在儀器的數據庫調用,以便他能告訴哪些查詢造成緩慢的原因之一等。這是我一直在測量過去使用SQL Profiler,但我對其他人用什麼策略將其作爲應用程序的一部分加入其中感興趣。插入檢測數據庫訪問

難道僅僅包括在每個數據庫調用一個計時器並記錄結果的情況下,還是有做這件事的「整潔」的方式?也許有一個框架可以爲你做到這一點,或者有一個我可以在例如Linq-to-SQL將提供類似的功能。

我主要使用C#,但也有興趣在看到來自不同語言的方法,我會更感興趣,這樣做對像SQL事件探查器數據庫平臺方法的「代碼」的方式。

回答

1

如果查詢,不只是一個簡單的SELECT在一個表上,我總是運行它通過EXPLAIN如果我對MySQL或PostgreSQL。如果您使用的是SQL Server,那麼Management Studio的顯示預計執行計劃本質上是相同的。瞭解引擎如何訪問每個表以及它將使用哪些索引是非常有用的。有時它會讓你感到驚訝。

0

如果您在SQL Management Studio中編寫查詢,您可以輸入:SET STATISTICS TIME ON,並且SQl Server會告訴您查詢的各個部分花費多長時間來解析,編譯和執行。 您可以通過處理SqlConnection類的InfoMessage事件來記錄此信息(但我認爲使用SQL Profiler更容易)。

1

記錄數據庫調用,總時間和記錄數(字節數)在應用程序中返回是有用的,但它不會給你所有你需要的信息。

它可能會顯示您不期待的使用模式。它可能會顯示您使用「逐行」訪問而不是「基於集合」操作的位置。

使用最好的工具就是SQL事件探查器和分析的「讀」與CPU和持續時間的數量。你想避免高CPU查詢,高讀取和長期(杜!)。

「按閱讀分組」是一項非常有用的功能,可以將最棘手的問題帶到最前面。

0

我原以爲這裏要問的重要一點是「你在用什麼數據庫平臺?」

例如,在Sybase中,安裝MDA tables可能會解決您的問題,它們提供了從過程調用使用到平均邏輯I/O,CPU時間和索引覆蓋範圍的大量統計信息。它可以像你想要的那樣聰明。

0

我確定在應用程序運行時看到了使用SQL Profiler的價值,而EXPLAIN或SET STATISTICS會爲您提供有關單個查詢的信息,但是有沒有人經常將測量點放入其代碼中以收集有關數據庫查詢的信息正在進行中 - 例如,一個對錶格執行罰款的查詢,但隨着行數增長,變得越來越慢。

如果你使用MySQL或Postgre有各種工具實時查詢看到活動,但我還沒有發現因爲SQL事件探查器爲好測量一段時間的查詢性能的工具。

我想知道是否存在(或應該?)類似於ELMAH的東西,它只是插入併爲您提供信息而無需額外的工作?

0

如果你進入火鳥,你可能想看sinatica.com
我們即將推出針對Firebird DBA的實時監控工具。

< /無恥插頭>