多層架構應用中,資料存取層效能直接決定整體回應速度。TIP 是 Visual Studio 2010 (Premium/Ultimate) 分析工具新功能,專門測量 .NET 應用程式對 AD.NET 相容資料庫同步呼叫的延遲,幫助找出造成回應延遲的關鍵資料請求。
分析期間動態插裝 MSIL,在 JIT 編譯前向關鍵 ADO.NET 方法加入計時程式碼,記錄每次呼叫耗時與命令文本。支援 SQL、OLE DB、ODBC、SQL CE,以及 LINQ to SQL、Entity Framework 產生的 SQL 命令。因為是進程外呼叫,插裝對應用程式效能影響極小。
情境:Web Form 使用 LINQ to SQL 查詢 AdventureWorks 客戶訂單歷程,涉及 Customer、CustomerAddress、Address、StateProvince 四個資料表聯結。
var customerquery = from c in db.Customers
from ca in db.CustomerAddresses
from a in db.Addresses
where c.CustomerID == custid && c.CustomerID == ca.CustomerID && ca.AddressID == a.AddressID
select new { c.CustomerID, c.CustomerType, a.AddressLine1, a.AddressLine2, a.City, a.StateProvince, a.PostalCode, c.TerritoryID };
報表上半部按 URL/程序匯總,顯示每個請求的資料庫呼叫次數、總耗時、平均耗時。下半部列出具體 SQL 命令、執行次數、總/平均/最小/最大耗時。雙擊可檢視完整 SQL 文本。

SELECT [t0].[CustomerID], [t0].[CustomerType], [t2].[AddressLine1], [t2].[AddressLine2], [t2].[City], [t3].[StateProvinceID], [t3].[StateProvinceCode], [t3].[CountryRegionCode], [t3].[IsOnlyStateProvinceFlag], [t3].[Name], [t3].[TerritoryID], [t3].[rowguid], [t3].[ModifiedDate], [t2].[PostalCode], [t0].[TerritoryID] AS [TerritoryID2]
FROM [Sales].[Customer] AS [t0]
CROSS JOIN [Sales].[CustomerAddress] AS [t1]
CROSS JOIN [Person].[Address] AS [t2]
INNER JOIN [Person].[StateProvince] AS [t3] ON [t3].[StateProvinceID] = [t2].[StateProvinceID]
WHERE ([t0].[CustomerID] = @p0) AND ([t0].[CustomerID] = [t1].[CustomerID]) AND ([t1].[AddressID] = [t2].[AddressID])
將 SQL 貼入 SQL Server Management Studio,替換參數 @p0,查看執行計畫。範例中每個 JOIN 都使用叢集索引查找單筆資料,效能良好。另一個訂單查詢因 ORDER BY 產生排序操作,佔總成本 40%,可針對索引優化。



TIP 提供應用層視角的計時與 SQL 文本,搭配 SSMS 執行計畫、索引建議、快取設定等資料庫層工具,能全方位診斷與優化資料存取效能。