2013-02-04 29 views
22

我想將MVC MiniProfiler的結果保存到sql服務器數據庫。我介紹了一個高負載mvc4頁面,以發現一個棘手的性能問題,這個問題在我們的測試或開發系統上是不可重現的,只會偶爾出現在生產服務器上。如何存儲MVC MiniProfiler結果

掛鉤到mini profiler的最佳方式是什麼?有沒有現有的擴展來做到這一點?

+0

我在mini profiler源代碼中找到了IStorage接口,但它似乎沒有很好的記錄。 – NickD

回答

35

我剛剛設置MiniProfiler將結果保存到SQL Azure中,這相當簡單。我們使用MiniProfiler.MVC3來處理所有接線,如here所述。

表創建腳本嵌入程序集與SqlServerStorage.TableCreationScript靜態字段,所以你可以使用它,但在挖掘代碼時,我發現最新的開發分支已通過添加一些索引稍微增強了腳本。其他表格結構不變,所以它仍然適用於nuget上的最新軟件包。

在編寫here is direct link到最新表創建腳本。

之後,你需要做的唯一的事情是建立MiniProfiler使用SQL用一行代碼:

MiniProfiler.Settings.Storage = new SqlServerStorage("<your connection string>"); 

如果你不使用SQL Azure的,就是這樣,但我發現一個當我們嘗試在Azure中使用它時遇到問題。我收到了以下異常(謝謝ELMAH)如果在分析試圖挽救:

System.Data.SqlClient.SqlException

表沒有聚集索引在此版本的SQL Server不支持。請創建聚集索引並重試。

爲了解決這個問題,我不得不向MiniProfilers表添加一個額外的(未使用的)列。這是有問題的創建表腳本的開頭:

create table MiniProfilers 
(
    RowId integer not null identity constraint PK_MiniProfilers primary key clustered, -- Need a clustered primary key for SQL azure 
    Id uniqueidentifier not null, 
    Name nvarchar(200) not null, 

而且由於GUID ID列不再是主鍵,我增加了一個額外的指標,以確保查找仍然快:

create unique nonclustered index IX_MiniProfilers_Id on MiniProfilers (Id) 

希望有所幫助。


更新

支持SQL Azure的變化已經被設置爲Pull Request和接受。謝謝Jarrod

+0

優秀的答案! –

+1

謝謝!!!順便說一句。我可以禁用Profiler的顯示嗎? – NickD

+1

@Snoopy yes,昨天檢查了[最初隱藏分析器結果](https://github.com/SamSaffron/MiniProfiler/commit/85609b6226eff71ac21dfa990dd1fa54aace237f)的能力;我還沒有做過nuget更新,但你可以從那裏獲得最新的源代碼和構建。 –